▲…マッチのカレントステート(現在の状態)
△…最初にマッチをしたところ
ABC AB?C
という文字列「ABC」と正規表現AB?C
があったとします。
Aがマッチし、▲を一つずらして下記のようになる。
△A▲BC A▲B?C
「B」がB?
にマッチするか調べるが、失敗してもよいように、文字列「B」が正規表現AB?▲C
にマッチするか?という保存ステートを保存。
<あとは質問と関係がないので省略>
ここまでの動作は、理解できます。ここで疑問が一つあります。別の正規表現になりますが、下記のようにバックトラックが発生する要素、つまり()内にある否定先読みとがグループ化されている場合、
<p>のマッチ後、あめんぼの**あ**の前まで進める… ```△<p>▲あめんぼ </p>あおいな</p> あいうえお <p>▲((?!</?p>).)*</p>```最初の例の場合は、
「B」が
B?
にマッチするか調べるが、失敗してもよいように、文字列Bが正規表現AB?▲C
にマッチするか?という保存ステートを保存。
ですが、2番目の例の処理の場合は、
文字列「あ」が((?!</?p>).)
にマッチするか調べるが、失敗しても良いように、「あ」が<p>((?!</?p>)▲.)*</p>
にまっちするか?という保存ステートを保存。
あるいは、
文字列「あ」が((?!</?p>).)
にマッチするか調べるが、失敗しても良いように、「あ」が<p>((?!</?p>).)*▲</p>
にまっちするか?という保存ステートを保存。
なのか、いったいどちらなのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。