in reply to Re: Re: Question on REGEX
in thread Question on REGEX

Pay attention to the exact wording. * is a quantifier, it says "match ZERO OR MORE". There's no particular character it matches, it's just that any string you care to pass it satisfies the condition "has zero or more 'a's in it".

By itself, /a*/ isn't a very useful regular expression (nor, for that matter, is /a+?/ as opposed to simply /a/, because that will match a single 'a' and no more (the shortest string of one or more "a"s is one "a").

Try it :perl -e 'print "Yee haw!\n" if "bob" =~ /a*/'

Better yet, perl -e 'print "Yee haw!\n" if undef =~ /a*/'

HTH!

perl -e 'print "How sweet does a rose smell? "; chomp $n = <STDIN>; $r +ose = "smells sweet to degree $n"; *other_name = *rose; print "$other +_name\n"'

Replies are listed 'Best First'.
Re: Re: Re: Re: Question on REGEX
by kal (Hermit) on May 14, 2001 at 19:44 UTC

    We're obviously differing in semantics, then :) I would say a* doesn't match bob because trying /(a*)/ wouldn't get you "bob".

    In the examples you give, the regexer is satisfied, but I wouldn't say the regex a* matches bob. In my parlanace, I would say (for example) a(b|a) would match ab. Then, a* doesn't match bob because a(a|b)a*a(a|b) won't match abbobab.

    Does anyone else share my terminology? Perhaps this is a function of the books we read...

      I think the distinction is "does this regex match that string" can be defined as "does this regex match that *ENTIRE* string" or "does this regex match the string over there, including taking any assertions into consideration". And both usages are equally valid use of the casual "match" word.

      So, to be clear, /(a*)/ "matches" bob, but not the "entire string of bob".

      -- Randal L. Schwartz, Perl hacker