これら 2 つの正規表現の違いは何ですか? (php preg_match() を使用)
/^[0-9\x{06F0}-\x{06F9}]{1,}$/u
/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u
\x
2番目のパターンの最後の意味は何ですか?
(null 文字)と解釈され\x00
ますが、これはほぼ間違いなく、ずさんな編集またはコピー アンド ペーストによるバグです。
http://www.regular-expressions.info/unicode.html
... \x 自体は有効な正規表現トークンではないため...
私が知る限り、2 番目\x
は実際には無効な文字です。両方の式が機能しますか?
2番目のパターンは有効ではないと思います。
このページhttp://www.regular-expressions.info/unicode.htmlによると、 \x の後にユニコード番号が続く場合にのみ有効です。
\x 自体は有効な正規表現トークンではないため、\x{1234} が \x と 1234 回一致すると混同されることはありません。
これは奇妙です。Unicode 文字の PHP 表記は \x{} です。perlでも同じです。
しかし、php の正規表現には //u 修飾子があります。それはユニコードを意味すると思います。perl にはそのような修飾子はありません。
perl 正規表現では、\x## が解析されます。## は、ASCII 文字を示すために必要です。\x または \x# の場合、違法な 16 進数の警告は無視され (これには 2 桁が必要であり、それ以上でもそれ以下でもないため)、シーケンス内の有効な 16 進数のみが使用されます。\x のように数字がない場合は、\0 ascii char などを使用します。
ただし、\x{} 表記はどれでもかまいません。\x{0} は \x{} と同等です。\x{0}-\x{ff} は ASCII と見なされ、\x{100}- は Unicode と見なされます。
したがって、\x は有効な 16 進/Unicode エスケープ シーケンスですが、それ自体は 16 進であると想定されており、不完全であり、おそらくパーサーのデフォルト メカニズムに任せるべきものではありません。