【发布时间】:2014-10-30 05:23:31
【问题描述】:
我正在调查与此问题相关的 another question。
我想知道为什么在使用 PHP >= 5.3.4 时使用 \p{L} 会导致 false 而在早期版本中使用 true?
print_r(preg_match("@^\d+\s+\p{L}+\s+\d+$@", "20 Août 2014"));
更新 #1
\p{L} 应该在 PCRE 8.30 到 8.34 中按预期工作,因为我可以在 RegexBuddy 等环境中进行测试:
所以从 PHP 5.4.14 (PCRE 8.30) 到 5.6 (PCRE 8.34) 应该实现相同的结果(因为我找不到对 PHP PCRE 包进行的任何自定义更改):
根据@user1578653 answer,使用字母 Å 和 0xc5 十六进制代码会有不同的输出,但是 it won't (!) 但它 should match .
【问题讨论】:
-
可能是配置问题。我刚刚用 PHP 5.2.6、5.3.3.7 和 5.3.26 尝试过这个。他们都返回了
false。 -
@squeamishossifrage 我不这么认为。它不应该返回
0。对于最新的 PCRE 引擎来说,它确实是一个正确的令牌 regex101.com/r/iE3kS5/1 -
This 在 5.3.4 中已修复,但它似乎充其量只是切线相关。也许它修复了整体的 Unicode 处理?