/ .NET正規表現内の/アンカー - .net、regex

.NET正規表現のアンカー - .net、regex

これは質問で与えられた答えについての質問です 文字列を調べて、すべての文字が16進値であるかどうかを確認してください.

提案されている正規表現は次のとおりです。

Ab[0-9a-fA-F]+bZ

今、 A そして Z と同等のようです ^ そして $ それぞれ、 Z マッチング時に改行を許可するという意味では異なった振る舞いをします(これは意図されているかどうかにかかわらず)

理解できないのはなぜ b 「単語境界で一致」アンカーが使用されます。文字列の先頭/末尾が常に単語の境界になっていませんか?

最終的に、正規表現は次のように書き直すことができます。 ^[0-9a-fA-F]$ 同じ振る舞いをする(末尾を無視する) n 問題)。私は何かが足りないのですか?使っています b いくつかの奇妙なエッジの場合に必要ですか?

テストケース:

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

回答:

回答№1は1

単語の境界 b 非単語文字と単語文字の間で一致し、最初の文字が単語文字の場合は文字列の先頭に、最後の文字が単語文字の場合は末尾にも一致します。

このように、 Ab[0-9a-fA-F]+bZ 等しい A[0-9a-fA-F]+Z なぜなら 文字列内のすべての文字は単語文字でなければなりません([0-9] 数字または [a-fA-F] それに一致するパターンの文字).

この場合は別の話になります。 Ab[0-9a-fA-F-]+bZ これは、先頭と末尾の単語文字を含む文字列にのみ一致します。

つかいます z 文字列全体にマッチする、no n 最後に許可されています。