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

I would be pretty sure that a* doesn't match "bob". I think you mean, a* will match the zero-width character at the start of "bob"?

Replies are listed 'Best First'.
Re: Re: Re: Question on REGEX
by arturo (Vicar) on May 14, 2001 at 17:01 UTC

    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"'

      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