граница слова на нелатинских символах в php - PullRequest
0 голосов
/ 29 августа 2010

Этот пример отлично работает:

echo preg_replace("/\bI\b/u", 'we', "I can"); // we can

Эта русская буква используется не работает, хотя я использую модификатор "u":

echo preg_replace("/\bЯ\b/u", 'мы', 'Я могу'); // still "Я могу"

Итак, вопрос в том, что я должен сделать, чтобы это исправить?
Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 августа 2010

В PCRE (библиотека, используемая preg_replace), \b относится только к границам слов в ASCII-смысле, т. Е. Только [a-zA-Z0-9_] являются символами слов.

Если вы хотите сопоставитьЯ символ, который не имеет букв, цифр или _ непосредственно перед или после, вы можете использовать:

(?<![\p{L}0-9_])Я(?![\p{L}0-9_])

Вам все еще нужно использовать модификатор u.

0 голосов
/ 18 ноября 2010

Границы слова часто нелогичны .

...