バックトラッキングは、正規表現のバックリファレンスとどのように異なりますか?
バックリファレンスは、バックトラックでどのように制限を勝ち取りますか、またはその逆ですか?
1 に答える
4
バックトラッキングは、ステートマシンがバックアップし、正規表現の他の一致を再試行する方法です。これは、正規表現エンジンの内部にあるものです。
たとえば、正規表現と一致させようとしているとします。[a-z]*a
任意の数の小文字の後に。が続きa
ます。
入力が与えられるとabca
、貪欲な一致はそのすべてを正規表現の部分に割り当てますが[a-z]
、最後のを一致させる方法はありませんa
。a
バックトラッキングを使用すると、エンジンはそのファイナルを入力ストリームに戻し、再試行しabc
て、その[a-z]
部分とa
その部分に割り当てることでバックアップできますa
。
一方、逆参照は、正規表現エンジンのユーザーが以前にキャプチャされたグループを参照するための手段です。例えば、
s/^([a-z])([a-z])/\1_\2/
\_____/\_____/
| |
| +- capture group 2
+-------- capture group 1
_
各行の先頭にある2つの連続する小文字の間に挿入するコマンドの場合があります。\N
後方参照(ここで、N
は数値を表します)は、内でキャプチャされたグループを参照します()
。
于 2013-01-19T10:34:56.887 に答える