Ответ 1
$message='[tag] [tag]';
echo preg_match_all('/\\[tag\\](?>\\s|$)/i', $message, $matches);
дает 2
. Обратите внимание: вы не можете использовать \b
, потому что граница слова перед ]
, а не после.
См. preg_match_all.
У меня есть предзаголовок соответствия, и он проверяет совпадения, но мне было интересно, как вы можете рассчитывать совпадения. Любые советы приветствуются.
$message='[tag] [tag]';
preg_match('/\[tag]\b/i',$message);
например, подсчет этой строки сообщения должен содержать 2 совпадения
$message='[tag] [tag]';
echo preg_match_all('/\\[tag\\](?>\\s|$)/i', $message, $matches);
дает 2
. Обратите внимание: вы не можете использовать \b
, потому что граница слова перед ]
, а не после.
См. preg_match_all.
preg_match уже возвращает количество совпадений с шаблоном.
Однако это будет только 0 или 1, поскольку он останавливается после первого совпадения. Вы можете использовать preg_match_all, поскольку он проверит всю строку и вернет общее количество совпадений.
Вы должны использовать preg_match_all
, если вы хотите совместить все вхождения. preg_match_all
возвращает количество совпадений. preg_match
возвращает только 0 или 1, поскольку он соответствует только одному.
Думаю, вам нужно preg_match_all. Он возвращает количество совпадений, которые он находит. preg_match останавливается после первого.
Вы можете использовать библиотеку T-Regx с методом count()
(и даже с автоматическими разделителями):
$count = pattern('\[tag]\b', 'i')->match('[tag] [tag]')->count();
$count // 2