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

sta*_*cke 4 php regex

这个问题询问如何检测UTF-8字符串 - 如何检测是否必须对字符串应用utf8解码或编码?

解决方案是这样的:

if (preg_match('!!u', $string))
{
   // this is utf-8
}
else 
{
   // definitely not utf-8
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何分解"!! u"表达式.我点击了所有PHP的PCRE内容,可能错过了"!"的描述.标记和"你" - 的东西.我尝试通过perl的YAPE :: Regex :: Explain运行它(如在解释这个Perl正则表达式中所见)并且无法获得有意义的东西[我不是perl专家 - 不知道我是否喂它正确的表达/字符串].

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

jnr*_*bsn 6

这只是一个空的正则表达式.!分隔符,u修改器.

至于它的工作原理,从PHP手册的u修饰符描述(强调我的):

此修饰符打开与Perl不兼容的PCRE的其他功能.模式字符串被视为UTF-8.此修饰符可从Unix上的PHP 4.1.0或更高版本以及win32上的PHP 4.2.3获得.自PHP 4.3.5起,检查模式的UTF-8有效性.


Jon*_*uhn 5

!正在使用作为分隔符来代替/.我会为你改写这个,//u是同样的事情.这u是一个修饰符,将模式视为utf8.