у меня есть preg_match_all искать слова в абзаце. Он не находит кириллические символы и т. Д. Как я могу изменить это, чтобы использовать все типы символов (английский, кириллица, ударные символы и т. Д.):
preg_match_all( '/\b' . $testWord .'\b/i', $content, $matches, PREG_OFFSET_CAPTURE );
Я пытался просто добавить U до конца регулярного выражения, и это кажется решением, но я спрашиваю здесь, чтобы увидеть, является ли это наилучшей практикой или есть лучший способ сделать регулярное выражение, которое я показываю.
preg_match_all( '/\b' . $testWord .'\b/iu', $content, $matches, PREG_OFFSET_CAPTURE );
Спасибо
К сожалению даже с u
модификатор сокращения слова границы \b
может действовать (то есть не соответствует тому, что вы ожидаете). Вы захотите заменить их отрицательными поисками, чтобы проверить \pL
(любая буква) или \pM
(любой знак сочетания.)
Вот так:
preg_match_all(
'/(?<![\pL\pM])' . $testWord .'(?![\pL\pM])/iu',
$content,
$matches,
PREG_OFFSET_CAPTURE
);
Других решений пока нет …