以下代码:
$string ='۱۲۳۴۵۶۷۸۹۰';
$regex ='@۱@';
preg_match_all($regex,$string,$match);
var_dump($match);
将输出:
array(1) {
[0] =>
array(1) {
[0] =>
string(2) "۱"
}
}
但
$regex2 ='@[۱]@';
preg_match_all($regex2,$string,$match);
var_dump($match);
将输出
array (size=1)
0 =>
array (size=11)
0 => string '�' (length=1)
1 => string '�' (length=1)
2 => string '�' (length=1)
3 => string '�' (length=1)
4 => string '�' (length=1)
5 => string '�' (length=1)
6 => string '�' (length=1)
7 => string '�' (length=1)
8 => string '�' (length=1)
9 => string '�' (length=1)
10 => string '�' (length=1)
确实我想使用像[۱۲۳۴۵۶۷۸۹۰]
这样的RegEx,但函数输出奇怪的结果与这样的RegEx。我使用PHP 5.4
答案 0 :(得分:2)
尝试添加Unicode标志:
$regex = '@[۱]@u';
这是因为۱
实际上是几个字节长。就它而言,它是无害的,因为那些确切的字节要么是符号,要么是巧合的单个字节。但是,在字符类中,任何单个字节都可以匹配其他字符中的任何单个字节,这是因为它们在地图中靠得很近。