在utf中匹配整个单词

时间:2013-01-22 10:32:08

标签: php regex

我想用a替换所有出现的5。以下代码运行良好:

$content=preg_replace("/\ba\b/","5", $content);

除非我有zapłać之类的字样,其中a位于非标准字符之间,或zmarła字样,其中有一个Unicode(或非ASCII)字母后跟a在最后的单词。有没有简单的方法来解决它?

2 个答案:

答案 0 :(得分:3)

问题是预定义的字符类\w是基于ASCII的,并且在使用u修饰符时不会改变。 (参见regular-expressions.info,preg是列中的PCRE)

您可以使用lookbehind and lookahead执行此操作:

$content=preg_replace("/(?<!\p{L})a(?!\p{L})/","5",$content);

如果之前没有信件而不是前面的信件,这将取代“a”。

\p{L}any kind of letter from any language

答案 1 :(得分:0)

$content=preg_replace("/\ba\b/u","5",$content);