可能重复:
regexp with russian lang
我有一个正则表达式,可以过滤掉文本中的某些链接,并根据链接的文件类型附加文件图标。像这样:
$text = preg_replace('((<a href="[\w\./:]+getfile.php\?id='.$file.'"([a-zA-Z0-9_\- ,\.:;"=]*)>)([a-zA-Z0-9_,\.:;&\-\(\)\<\>\'/ ]+)</a>)','\\1'.fileicon($name).'</a> \\1\\3</a> ('.($pagecount?$pagecount." ".($pagecount>1?$pages:$page1).", ":"").readable_filesize($size,1).')',$text);
这很有效,直到我用一些俄语文本尝试这个。输入将类似于:
<a href="/site/getfile.php?id=33">Русский</a>
但它不会在链接之前显示链接和文件信息之前的图标,这让我怀疑正则表达式与俄语文本不一致。这可能是什么情况?
答案 0 :(得分:2)
您的角色类只允许[a-zA-Z0-9_,\.:;&\-\(\)\<\>\'/ ]
。那里没有russion字符。
您可以通过在课程中添加相关字符来解决此问题。如果你只需要支持俄语,\p{InCyrillic}
应该这样做。如果您想要所有的unicode字母\p{Letter}
。
答案 1 :(得分:2)
使用Unicode字符串时,您应使用u
修饰符:
preg_replace('/>([^<]+)</u', '', $string);
答案 2 :(得分:1)
您可以将正则表达式简化为
$re = "~
(<a\s+href=\".+?getfile\.php\?id=$file\".*?>)
(.+?)
</a>
~xui";
这应该自动解决西里尔问题。
答案 3 :(得分:0)
西里尔字母unicode字符在\x0400-\x04FF
范围内。在角色类中添加此范围。