2010-12-07 15 views
1
Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False 

だから、aの照合を試み成功し、その後、$を一致させようと失敗したので、バックトラックと\1で開始する、他の論理和をしようとします。私はそれが "a"を打つと仮定します\1は値 "a"を取った、しかし今それはその値を忘れてしまったので、それはどういう仕組みですか?そして、\1は、その時点以降何も一致しないでしょうか?なぜこの正規表現は一致しませんか?

+0

あなたがマッチさせようとしていることを教えてください。 –

+0

@Jason:何もありません。彼らがどのように働いているかを深く理解しようとしています。 – mpen

答えて

4

正規表現での逆参照は、常にと一致するものと一致します(現在と一致しています)。これは一貫性の問題です。一致しない文字列のセクションは、一致するエンジンの状態を汚染してはなりません。その結果、偽陽性となります。

これは正しいことです:対応するキャプチャグループも交替演算子の反対側にあるので、逆参照は決して(空の文字列であっても)一致しません。

関連する問題