解释这个 UTF-8 检测正则表达式

5
这个问题是关于如何检测UTF-8字符串的 - 如何检测字符串是否需要应用utf8解码或编码? 解决方案如下:
if (preg_match('!!u', $string))
{
   // this is utf-8
}
else 
{
   // definitely not utf-8
}

我无法解释“!!u”表达式的含义。我查看了PHP的所有PCRE文档,但可能错过了“!”标记和“u”相关的说明。我尝试使用Perl的YAPE :: Regex :: Explain(如此处所示)运行它,但是无法得到有意义的结果[我不是perl专家-不知道是否输入了正确的表达式/字符串]。

那么... preg_match('!!u', $string) 究竟是如何工作的呢?


1
你有检查那个答案的评论吗? - Madara's Ghost
2个回答

7
这只是一个空的正则表达式。 定界符u修饰符
至于为什么它能工作,从PHP手册对u修饰符的描述中(我强调):

此修饰符打开了与Perl不兼容的PCRE的其他功能。模式字符串被视为UTF-8。此修饰符在Unix上从PHP 4.1.0或更高版本以及win32上从PHP 4.2.3开始提供。自PHP 4.3.5以来,将检查模式的UTF-8有效性。


5

使用的分隔符是!而不是/。我将为您重写,//u也是同样的意思。 u是一个修饰符,将模式视为utf8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接