PHP preg_ /u utf-8 开关 - 不理解它在实践中的作用

PHP preg_ /u utf-8 switch - Not understanding what it does in practice

我正在将 php/mariadb 网络应用程序从 latin1 转换为 utf-8。我让它工作,但我没有在我的任何 preg_ 语句上使用 /u 开关,它似乎工作正常。我试过俄语、中国传统和简单、日语、阿拉伯语、印度语的样本。该应用程序的一部分是一个 wiki,它广泛使用 preg 语句并且它也可以正常工作。

那么 preg /u 开关应该做什么? ...因为没有它似乎工作正常?

我已经查找了 2 周的相关信息,但我找不到任何能够以区别于 'not' 使用的方式来解释 /u 开关的内容。

我确定我的 php 正在使用的 prce 中确实具有 utf-8 pcre 功能。我正在使用 PHP v5.6.20,MariaDB 5.5.32。我的网页、mysql 驱动程序和 mariadb 都使用 utf-8。

PCRE 在决定如何处理某些匹配情况时使用 u 修饰符。例如,对于点元字符,允许多个字节,假设它们形成有效的 UTF-8 序列:

preg_match('/^.$/', '老');  // 0
preg_match('/^.$/u', '老'); // 1

另一个例子,当考虑一个字符覆盖的内容时class:

preg_match('/^[[:print:]]$/', '老'); // 0
preg_match('/^[[:print:]]$/u', '老'); // 1

当直接在正则表达式中包含 UTF-8(或实际上以任何其他编码编码的字符串)时,u 修饰符实际上没有任何区别,因为 PCRE 最终将逐字节匹配。