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