preg_match_all: включает не-ASCII символы

у меня есть 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 );

Спасибо

0

Решение

К сожалению даже с u модификатор сокращения слова границы \b может действовать (то есть не соответствует тому, что вы ожидаете). Вы захотите заменить их отрицательными поисками, чтобы проверить \pL (любая буква) или \pM (любой знак сочетания.)

Вот так:

preg_match_all(
'/(?<![\pL\pM])' . $testWord .'(?![\pL\pM])/iu',
$content,
$matches,
PREG_OFFSET_CAPTURE
);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]