0

これら 2 つの正規表現の違いは何ですか? (php preg_match() を使用)

/^[0-9\x{06F0}-\x{06F9}]{1,}$/u

/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u

\x2番目のパターンの最後の意味は何ですか?

4

5 に答える 5

4

(null 文字)と解釈され\x00ますが、これはほぼ間違いなく、ずさんな編集またはコピー アンド ペーストによるバグです。

于 2012-05-06T17:22:01.290 に答える
1

http://www.regular-expressions.info/unicode.html

... \x 自体は有効な正規表現トークンではないため...

于 2012-05-06T17:26:14.207 に答える
0

私が知る限り、2 番目\xは実際には無効な文字です。両方の式が機能しますか?

于 2012-05-06T18:51:09.303 に答える
0

2番目のパターンは有効ではないと思います。

このページhttp://www.regular-expressions.info/unicode.htmlによると、 \x の後にユニコード番号が続く場合にのみ有効です。

\x 自体は有効な正規表現トークンではないため、\x{1234} が \x と 1234 回一致すると混同されることはありません。

于 2012-05-06T17:27:22.693 に答える
0

これは奇妙です。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 進であると想定されており、不完全であり、おそらくパーサーのデフォルト メカニズムに任せるべきものではありません。

于 2012-05-06T18:09:46.197 に答える