Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!hplabs!hpfcso!hpfcmdd!hpbbrd!hpbbn!hpcc01!hpccc!weisberg From: weisberg@hpccc.HP.COM (Len Weisberg) Newsgroups: comp.lang.perl Subject: how long is a {0,m} match? Message-ID: <12170008@hpccc.HP.COM> Date: 2 Aug 90 00:40:08 GMT Organization: HP Corp Computing & Services Lines: 98 Here's another bit of confusing regexp behavior: ------------------------------------------------------------------------------ ## perl test program: sub try { local($pat, $str) = @_; $str =~ /$pat/ ; print "\$pat=/$pat/, \t\$str=$str, \t\$&=$&<<\n"; } &try ( "a+", "aaay"); &try ( "a+", "xaaay"); print "\n"; &try ( "a{1,}", "aaay"); &try ( "a{1,}", "xaaay"); print "-----------------\n"; &try ( "a{1,2}", "aaay"); &try ( "a{1,2}", "xaaay"); print "\n"; &try ( "a{1,4}", "aaay"); &try ( "a{1,4}", "xaaay"); print "-----------------\n"; &try ( "a*", "aaay"); &try ( "a*", "xaaay"); print "\n"; &try ( "a{0,}", "aaay"); &try ( "a{0,}", "xaaay"); print "-----------------\n"; &try ( "a?", "aaay"); &try ( "a?", "xaaay"); print "\n"; &try ( "a{0,1}", "aaay"); &try ( "a{0,1}", "xaaay"); print "-----------------\n"; &try ( "a{0,4}", "aaay"); &try ( "a{0,4}", "xaaay"); print "\n"; ----------------------------------------------------------------------------- results: $pat=/a+/, $str=aaay, $&=aaa<< $pat=/a+/, $str=xaaay, $&=aaa<< $pat=/a{1,}/, $str=aaay, $&=aaa<< $pat=/a{1,}/, $str=xaaay, $&=aaa<< ----------------- $pat=/a{1,2}/, $str=aaay, $&=aa<< $pat=/a{1,2}/, $str=xaaay, $&=aa<< $pat=/a{1,4}/, $str=aaay, $&=aaa<< $pat=/a{1,4}/, $str=xaaay, $&=aaa<< ----------------- $pat=/a*/, $str=aaay, $&=aaa<< $pat=/a*/, $str=xaaay, $&=<< $pat=/a{0,}/, $str=aaay, $&=aaa<< $pat=/a{0,}/, $str=xaaay, $&=<< ----------------- $pat=/a?/, $str=aaay, $&=a<< $pat=/a?/, $str=xaaay, $&=<< $pat=/a{0,1}/, $str=aaay, $&=a<< $pat=/a{0,1}/, $str=xaaay, $&=<< ----------------- $pat=/a{0,4}/, $str=aaay, $&=aaa<< $pat=/a{0,4}/, $str=xaaay, $&=<< ------------------------------------------------------------------------------ If there is some general principle about longest match, it seems to break when 0 repetitions match, but only when the match is not at the start of the string. Does this make sense? Is it a bug? ( perl -v gives: $Header: perly.c,v 3.0.1.5 90/03/27 16:20:57 lwall Locked $ Patch level: 18 etc...) Any enlightenment appreciated. Thanks, - Len Weisberg - HP Corp Computing & Services - weisberg@corp.HP.COM