Совпадение совпадений

У меня есть предзаголовок соответствия, и он проверяет совпадения, но мне было интересно, как вы можете рассчитывать совпадения. Любые советы приветствуются.

$message='[tag] [tag]';
preg_match('/\[tag]\b/i',$message);

например, подсчет этой строки сообщения должен содержать 2 совпадения

Ответ 1

$message='[tag] [tag]';
echo preg_match_all('/\\[tag\\](?>\\s|$)/i', $message, $matches);

дает 2. Обратите внимание: вы не можете использовать \b, потому что граница слова перед ], а не после.

См. preg_match_all.

Ответ 2

preg_match уже возвращает количество совпадений с шаблоном.

Однако это будет только 0 или 1, поскольку он останавливается после первого совпадения. Вы можете использовать preg_match_all, поскольку он проверит всю строку и вернет общее количество совпадений.

Ответ 3

Вы должны использовать preg_match_all, если вы хотите совместить все вхождения. preg_match_all возвращает количество совпадений. preg_match возвращает только 0 или 1, поскольку он соответствует только одному.

Ответ 4

Думаю, вам нужно preg_match_all. Он возвращает количество совпадений, которые он находит. preg_match останавливается после первого.

Ответ 5

Вы можете использовать библиотеку T-Regx с методом count() (и даже с автоматическими разделителями):

$count = pattern('\[tag]\b', 'i')->match('[tag] [tag]')->count();

$count // 2