小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

『選択の最短マッチ(最小マッチ)は可能ですか?』の答え

昨日のつづきです。

◆選択の最短マッチ(最小マッチ)は可能ですか?

◆答え(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を選択するかの意味です。