プロが教える店舗&オフィスのセキュリティ対策術

詳説正規表現154pでバックトラックについて解説しているところでふたつの疑問があります。

"<中略>実際に使う上では、細部のいくつかの点が特に重要になる。まず、複数の選択肢があるときに、どの選択肢を最初に試すべきかという問題がある。
次に、バックトラックを強いられたときに、保存してある選択肢の中のどれを次に使うべきなのかという問題がある。<中略>"

ここで前者の問題の答えとして

"量指定子の対象となっている要素のように、選択すべきことが「マッチを試行する」か「試行しないか」かのどちらかである場合、最大量指定子では「マッチを試行する」をまず選び、最小量指定子では
「マッチを試行しない」を選ぶ。"


とあります。(a|b)のような状態のとき、+?や?などの最小量指定子のときはマッチせず、最大量指定子のときはマッチするとあります。これは具体的にどういうことなのでしょうか。
いまいち言っていることが分かりません。

後者の問題の答えとして

"要素の局所的なマッチ不成功によってバックトラックを強いられた時に次に試すべきなのは、最後に保存した選択肢である。選択肢は後入れ先出で使われる"

とあります。局所的なマッチ不成功後のバックトラックというのは、複数ある選択肢のうちのどれかがマッチしなかったので、正規表現エンジンが他の選択肢をあたろうとしているときであっておりますか。
(a|b|c)とあったら、aが成功しなければb、bが成功しなければcのように処理されると思っていたのですが、最後に保存した選択肢とは、いったいどういうことでしょうか。

A 回答 (1件)

> (a|b)のような状態のとき、+?や?などの最小量指定子のときはマッチせず、最大量指定子のときはマッチするとあります。

これは具体的にどういうことなのでしょうか。

質問の意図が読み取れません。
この文章は、選択と量指定子がごっちゃになっていますが、どこに記述されていますか?
154p前後には見当たりませんでした。


> (a|b|c)とあったら、aが成功しなければb、bが成功しなければcのように処理されると思っていたのですが、

こちらは、ご理解の通りで良いと思います。(少なくともNFA型のエンジンでは)
153p 4.4.1.1項にその通り記載されています。

>最後に保存した選択肢とは、いったいどういうことでしょうか。

aがマッチするかトライする際に、他に選択肢としてbとcがあるという状態を保存(状態1)します。
もしaがマッチしなかった場合には、保存された状態1に戻って、bがマッチするかトライします。この時(他の選択肢としてcがあるという状態(状態2)を保存します。
bがマッチしなかった場合は、保存してあった状態2に戻って、cがマッチするかトライする。

といった動作になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!