preg_match与UTF8

时间:2013-06-26 15:52:40

标签: php regex utf-8

假设我有以下内容:

$str1 = "via Tokyo";
$str2 = "via 東京";

我希望在“via”之后匹配任何非空白字符。通常我会使用以下内容:

preg_match("/via\s(\S+)/", $str2, $match);

获取匹配的字符。由于preg_match不理解utf8,我认为这不适用于上述情况,但在这种情况下它完美无缺。

这是否正常,因为preg_match只是在查找不是空格的字节,如果是这样,我可以安全地将其用于任何UTF8字符吗?

PS我知道我应该真的使用mb_ereg函数(或完全避免使用PHP),但我正在寻找一个更好的理解为什么这样做。谢谢!

2 个答案:

答案 0 :(得分:1)

是的,UTF-8对特殊的Unicode字符使用多字节序列,并且通过使用高位(不足)来保证它们与ASCII不同。因此,搜索斜杠,反斜杠或空格永远不会在多字节序列中出现误报。

答案 1 :(得分:0)

这是有效的,因为构成的各个字节恰好不是单字节字符集中的空白字符。除其他外,你的正则表达式会很乐意接受 - (em空间),尽管它是一个空格字符。

尝试将u修饰符添加到结尾,以启用UTF-8支持。

相关问题