『選択の最短マッチ(最小マッチ)は可能ですか?』の答え
昨日のつづきです。
◆選択の最短マッチ(最小マッチ)は可能ですか?
◆答え(masa-kさんに教えていただきました)
$wkstr =~ /^(A.*)(CCC|DDD)/;
を
$wkstr =~ /^(A.*?)(CCC|DDD)/;
とする。
・サンプル
$wkstr = "AAABBBCCCDDDEEE"; $wkstr =~ /^(A.*?)(CCC|DDD)/; print "No.4 ", $1, "\n";
C:\perltest>perl t04.pl No.4 AAABBB
いやー、分かってみれば当たり前なんだけど・・・、勘違いのツボにはまると不可能に思えてしまう・・・orz
今回の勘違いは、最短マッチというのは『複数マッチする場合に最短のもの』と理解していて・・・。
今回は『A.*』にマッチするのは一つ(単数)しかないので・・・思いつかなかったのです。
最短マッチは、単数マッチの場合でも、選択がからむ時は有効なのですね!
ちなみに、ここで言っている『選択』とは、正規表現の『選択』です。
たとえば、(CCC|DDD)の場合、CCCか、またはDDDを選択するかの意味です。