为什么\ w在Mac OS X PHP环境中匹配非英语字符?

大湾

我发现“ \ w”可以在Mac OS X PHP环境中匹配汉字。但是相同的代码在Linux上不起作用。

php -r "echo preg_match('/^\w+$/','人1234', \$m).chr(10); var_dump(\$m);"

带有PHP 5.6.18(CLI),PHP 5.4.45(CLI)的Mac OS X 11.11.3

1
array(1) {
  [0] =>
  string(7) "人1234"
}

使用PHP 5.6.18(CLI),PHP 5.2.17P1(CLI)的Cent OS 6

0
array(0) {
}

PHP手册说

字母和数字的定义由PCRE的字符表控制,如果进行区域特定的匹配,则可能会有所不同。例如,在“ fr”(法语)语言环境中,某些大于128的字符代码用于带重音的字母,并且这些字符由\ w匹配。”

我猜有些链接到PCRE库。有人可以解释为什么吗?

革命

是的,这一切都是关于如何与PHP一起编译PCRE:

pcre *pcre_compile(const char *pattern,
      int options,
      const char **errptr,
      int *erroffset,
      const unsigned char *tableptr); 

在此函数中,负责将RegExes编译为其内部形式,options参数是一列位,包括PCRE_UCP(UCP = Unicode字符属性),该位允许\w\d而其他令牌则使用unicode属性,并且看来Mac OS X机器上的PHP的PCRE在此标志打开的情况下进行编译。

(*UCP)您还可以即时使用一个特殊的修饰符,即使您的PCRE没有使用PCRE_UCP标志集进行编译,也可以在运行时启用此选项。

例如,也/(*UCP)\w+/匹配unicode字符。在线观看

PCRE网站

PCRE处理无大小写的匹配,并通过参考由字符代码点索引的一组表来确定字符是字母,数字还是其他字符。

UTF-8模式下或在16位或32位库中运行时,这仅适用于代码点小于256的字符。默认情况下,高值代码点永远不会与转义符(例如\w或)匹配\d

但是,如果PCRE是使用Unicode属性支持构建的,则可以使用\ p和\ P来测试所有字符,或者,可以在编译模式时设置PCRE_UCP选项;否则,请参见图9。这会导致\w和朋友使用Unicode属性支持而不是内置表

不建议在Unicode中使用语言环境。如果要处理代码点大于128的字符,则应使用Unicode支持或使用语言环境,但不要尝试将两者混用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么python的Popen无法在Mac OS X上传递环境变量?

为什么Mac App Store中的OS X 10.9.2更新比Apple网站中的更新小?

为什么“ / dev / rdisk”比Mac OS X中的“ / dev / disk”快20倍

为什么malloc()分配的内存比要求的多,并且如何在Mac OS X中禁用malloc?

为什么Mac OS X上的某些(全部?)文件更大?

为什么Mac OS X别名文件这么大?

为什么Ubuntu比Windows或Mac OS X更安全?

为什么每次在MAC OS X上打开终端时,都会收到PHP date.timezone警告?

为什么我不需要在Mac OS X中设置CLASSPATH和JAVA_HOME?

为什么Option +向左箭头在Vim中可以使用,而在Mac OS X上不能向右箭头?

在OS X 10.9中不推荐使用'gluErrorString'。为什么?

Mac OS X中的环境变量

Mac Os X中.trashes文件的意义是什么?

在Mac OS X中,“ tcpdump -xx”有什么作用?

Mac OS X中Command + H和Command + W之间的区别

为什么在我的MAC OS X 10.11上看不到JAVA_HOME路径?

为什么 Mac OS X 坚持将我的 MTU 更改为 1500?

为什么Mac OS X上的sudo -n总是返回0?

为什么Mac OS X上的Python time.time()和time.clock()有差异?

为什么Mac OS X需要如此频繁地重新启动才能进行更新?

为什么getopt无法在python 2.7.5 Mac OS X上运行

为什么[fopen()/ open()/ fstream file]在Mac OS X上无法打开文件?

为什么CoreLocation(Mac OS X)忘记了我允许使用的选择?

为什么字体有时在Mac OS X上看起来像“胖”?

为什么Mac OS X中“ /etc/resolv.conf”中的名称服务器不是我的路由器IP?

为什么 Firefox 无法识别在 Mac OS X 系统偏好设置中创建的应用程序键盘快捷键?

升级到macOS Sierra / Xcode 8后,为什么不再兑现MAC_OS_X_VERSION_MIN_REQUIRED和MAC_OS_X_VERSION_MAX_ALLOWED?

如何使用Mac OS X在终端中激活Anaconda环境?

更改Mac OS X默认PHP版本