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


Explain this UTF-8 detection regex

这个问题问如何检测 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正则表达式所示)运行它,但无法获得有意义的东西[我不是perl专家 - 不知道我是否给了它正确的表达式/字符串]。

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

它只是一个空的正则表达式。 !是分隔符,u是修饰符。

至于它为什么有效,来自 PHP 手册对 u 修饰符的描述(强调我的):

此修饰符打开了与Perl不兼容的PCRE的附加功能。模式字符串被视为 UTF-8。此修饰符在 Unix 上可从 PHP 4.1.0 或更高版本使用,在 win32 上可从 PHP 4.2.3 获得。从 PHP 4.3.5 开始检查模式的 UTF-8 有效性

!被用作

分隔符而不是/。我会为你重写这个,//u是一样的。u是一个修饰符,它将模式视为 utf8。