Граница слова на не латинских символах в PHP
-
02-10-2019 - |
Вопрос
Этот пример работает нормально:
echo preg_replace("/\bI\b/u", 'we', "I can"); // we can
Это были русские буквы, используются не работают, даже если я использую модификатор «U»:
echo preg_replace("/\bЯ\b/u", 'мы', 'Я могу'); // still "Я могу"
Так что вопрос в том, что я должен сделать, чтобы это исправить?
Спасибо.
Решение
В PCRE (библиотека, используемая preg_replace
), \b
относится только к границам слов в смысле ASCII, то есть только [a-zA-Z0-9_]
являются символами слова.
Если вы хотите подобрать Я
персонаж, который не имеет букв, цифр или _
Непосредственно перед или после, вы можете использовать:
(?<![\p{L}0-9_])Я(?![\p{L}0-9_])
Вы все еще должны использовать u
модификатор.
Другие советы
Границы слова часто противообитный.
Не связан с StackOverflow