问题
尽管 PHP 手册指出:
为什么波斯数字匹配\d
或[[:digit:]]
处于“UTF-8 模式”?
细化
在一个不相关问题的回答者评论中提到,在正则表达式中,\d
不仅匹配 ASCII 数字0
,9
而且还匹配波斯数字 ( ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷
)。
上面提到的问题被标记为java但在 PHP 中也可以观察到该行为。考虑到这一点,我编写了以下“测试”:
$string = 'I have ۳ apples and 5 oranges';
preg_match_all('/\d+/', $string, $capture);
结果数组仅$capture
包含一个匹配项。5
使用u
修饰符打开“UTF-8 模式”并运行:
$string = 'I have ۳ apples and 5 oranges';
preg_match_all('/\d+/u', $string, $capture);
导致在和$capture
上都包含匹配项。۳
5
笔记
- 这个问题是指 PHP 5.6.22(最新的)
- 这两个测试都是在明确使用
C
语言环境时执行的。