UTF-8モードでも、\d
と[[:digit:]]
のような定義済みの文字クラスは、ASCII文字にのみ一致します。あなたが特定の文字または範囲を一致させる必要がある場合は、あなたと\x{HHHH}
エスケープシーケンスを使用することができますいずれか
$s = "12345\xD9\xA1\xD9\xA2\xD9\xA3\xD9\xA4\xD9\xA5";
preg_match_all('~\p{Nd}{5}~u', $s, $matches);
See it in action on ideone.com
:潜在的に非ASCII数字が一致するには、同等のUnicodeプロパティ、\p{Nd}
を使用する必要があります適切なコードポイント:
preg_match_all('~[\x{0661}-\x{0665}]{5}~u', $s, $matches);
...または入力に\xHH
形式を使用し、それらのUTF-8でエンコードされたバイトシーケンス:
preg_match_all("~[\xD9\xA1-\xD9\xA5]{5}~u", $s, $matches);
この最後の例では二重引用符に切り替えることに注意してください。 \p{}
と\x{}
フォームは、正規表現コンパイラで処理するために渡されましたが、今度はPHPコンパイラでエスケープシーケンスを展開します。それはシングルクォートの文字列では起こりません。
誤った '$ input'を貼り付ける可能性がありますか?私はこのエラーを見て非常に興味があります。 –