假设我有以下内容:
$str1 = "via Tokyo";
$str2 = "via 東京";
我希望在“via”之后匹配任何非空白字符。通常我会使用以下内容:
preg_match("/via\s(\S+)/", $str2, $match);
获取匹配的字符。由于preg_match
不理解utf8,我认为这不适用于上述情况,但在这种情况下它完美无缺。
这是否正常,因为preg_match
只是在查找不是空格的字节,如果是这样,我可以安全地将其用于任何UTF8字符吗?
PS我知道我应该真的使用mb_ereg
函数(或完全避免使用PHP),但我正在寻找一个更好的理解为什么这样做。谢谢!
答案 0 :(得分:1)
是的,UTF-8对特殊的Unicode字符使用多字节序列,并且通过使用高位(不足)来保证它们与ASCII不同。因此,搜索斜杠,反斜杠或空格永远不会在多字节序列中出现误报。
答案 1 :(得分:0)
这是有效的,因为构成東
和京
的各个字节恰好不是单字节字符集中的空白字符。除其他外,你的正则表达式会很乐意接受 - (em空间),尽管它是一个空格字符。
尝试将u
修饰符添加到结尾,以启用UTF-8支持。