2013-06-26 41 views
0

比方说,我有以下几点:的preg_match与UTF8

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

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

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

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

这是否工作正常,因为preg_match只是寻找字节不是空白,如果是的话,我可以安全地使用这个任何UTF8字符?

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

+0

它 “作品”,但它会考虑'U + 2003 EM SPACE','U + 200A HAIR SPACE',和其他字符用'Space'属性为非空间('\ S')代替空格('\ s')。 – hobbs

回答

1

是,UTF-8使用多字节序列的特殊Unicode字符,并且它保证它们是由具有高的位(undermore)从ASCII不同。因此搜索斜杠,反斜杠或空格将不会在多字节序列中出现误报。

+0

好的,谢谢澄清关于保证没有误报。 – Graham

0

它正在工作,因为构成的单个字节恰好不是单字节字符集中的空白字符。除其他事项外,尽管它是一个空白字符,但您的正则表达式将很乐意接受 -   - (em空格)。

尝试添加u改性剂到终点,以使UTF-8的支持。