2012-01-25 4 views
33

正規表現のバックトラッキングを使用するのはどういう意味ですか?正規表現では、バックトラック/バック参照とは何ですか?

また、例を挙げてください。

+0

* backtrace * =バックトラッキングと仮定すると、同様の質問:[どの正規表現にバックトラッキングが必要ですか?](http://stackoverflow.com/questions/8132412/which-regular-expression-requires-backtracking) –

+0

ありがとうございます。はい。 – chrisjlee

+0

http://www.regular-expressions.info/catastrophic.htmlに関する詳しい説明があります。 – bkzland

答えて

53

バックリファレンスとバックトラックは2つの異なるものです。前者は、コードの後のキャプチャの結果を使用しています。

(['"]).*?\1 

これは(一瞬エスケープを無視して)、単一または二重引用符で囲まれた文字列にマッチします。これは、開いているシンボル(一重引用符または二重引用符)を参照するために逆参照を使用するので、最後に一致させることができます。

バックトラックは、マッチが失敗したときに正規表現が自然に行うことです。例えば、私はそれが最初.+aaaaaabcと一致し、残りのdに対してbを比較する文字列

aaaaaabcd 

に対して表現

.+b 

に一致しています。これは失敗するので、ビットをバックトラックして.+aaaaaabに一致させ、最後にbcを比較します。これも失敗するので、再度バックトラックして、.+の場合はaaaaaaを、bの場合はbと一致します。

+0

クール!例.. – SIslam

関連する問題