2012-11-09 3 views
0

:이상한 행동 코드에 따라

$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

답변

2

시도를 사용하고 있습니다 : ۱ 실제로 몇 바이트이기 때문에

$regex = '@[۱]@u'; 

이것에 대한 이유입니다. 그 자체로는 정확한 바이트가 기호이거나 거기에있는 개별 바이트이기 때문에 무해한 것입니다. 그러나 문자 클래스에서 개별 바이트 중 하나가 다른 문자의 개별 바이트 중 하나와 일치 할 수 있습니다. 이는지도에서 서로 가깝기 때문입니다.