1
  1. バックトラッキングは、正規表現のバックリファレンスとどのように異なりますか?

  2. バックリファレンスは、バックトラックでどのように制限を勝ち取りますか、またはその逆ですか?

4

1 に答える 1

4

バックトラッキングは、ステートマシンがバックアップし、正規表現の他の一致を再試行する方法です。これは、正規表現エンジンの内部にあるものです。

たとえば、正規表現と一致させようとしているとします。[a-z]*a任意の数の小文字の後に。が続きaます。

入力が与えられるとabca、貪欲な一致はそのすべてを正規表現の部分に割り当てますが[a-z]、最後のを一致させる方法はありませんaaバックトラッキングを使用すると、エンジンはそのファイナルを入力ストリームに戻し、再試行し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 に答える