正規表現のようなものを使用して文字列内のパターンを見つけるツールを構築しようとしています (テキスト文字列ではありませんが、現時点では重要ではありません)。私はオートマトン理論に精通しています。つまり、基本的な正規表現マッチングを実装する方法を知っており、文字列が正規表現と一致する場合は、教科書の方法でオートマトンをシミュレートすることにより、true または false を出力します。
a
s の前に来るすべての s に興味があるとします。sの前にb
s はもうありません。しかし、文字列にそのような部分が含まれているかどうかを確認したいだけではなく、出力として を取得して、それを検査できるようにしたい (実際にテキストを扱っているわけではないことを思い出してください)。a
b
a[^a]*b
a
a
要約すると、次のように括弧でマークを付け(a)[^a]*b
て、入力文字列で実行するとbcadacb
、2番目の文字列が出力として必要になるとしましょうa
。
または、より一般的には、入力文字列のどの文字が正規表現のどの部分に一致するかを見つけることができますか? テキストエディタではどのように行われますか? 一致を強調表示できるため、少なくとも一致が開始された場所がわかります。バックトラッキング アプローチを使用する必要がありますか? それとも、よりスマートで計算コストの低い方法がありますか?
編集: 適切な後方参照、つまり、括弧でキャプチャして \1 で参照するなどは必要ない場合があります。私は、後方参照がバックトラッキング (または同様のもの) の必要性を導入し、問題 (IIRC) を NP 困難にすることを知っています。私の質問は、本質的には次のとおりです。後方参照なしのキャプチャ部分は、適切な後方参照よりも計算コストが低くなりますか?