2016-04-15 18 views
4

これは質問Check a string to see if all characters are hexadecimal valuesで与えられた答えに関する質問です。.NET正規表現のアンカー

提案正規表現は以下の通りです:

\A\b[0-9a-fA-F]+\b\Z 

は今、\A\Zはそれぞれ^$と同等であるように見えます。 \Zは、マッチングの後に改行を許すという点で、これとは異なる振る舞いをしています(これは意図しているかもしれません)。

「単語境界で一致する」アンカーが\bである理由はわかりません。文字列の始まりと終わりは常に単語の境界ではありませんか?

最終的に、正規表現は同じ動作(後ろの\nの問題を無視して)を使って^[0-9a-fA-F]$と書き直すことができました。何か不足していますか?奇妙なエッジケースには\bが必要ですか?

テストケース:非単語と単語の文字の間

123ABC -> true 
123def -> Returns true 
123g -> Returns false 
+0

ええ、私は '\ b'が達成していることは考えられません。 – smead

答えて

1

word boundary \b一致し、また、文字列の先頭に最初の文字が単語文字で、末尾の最後の文字であれば場合単語の文字です。

ストリング内すべての文字がそれに一致するパターンのための単語文字([0-9]数字又は[a-fA-F]文字)でなければならないので、したがって、\A\b[0-9a-fA-F]+\b\Z\A[0-9a-fA-F]+\Zに等しいです。

\A\b[0-9a-fA-F-]+\b\Zこの場合は、最初と最後に単語文字列と一致する文字列と一致する別の話になります。

\zを使用すると、文字列全体を一致させることができます。最後には\nを使用できません。