From: Conrad Schneiker Date: 2000-09-02T15:40:02+09:00 Subject: [ruby-talk:4740] Re: Possible regex bug? Hi, "Dave Thomas" wrote: > hal9000@hypermetrics.com writes: > > > OK, I'm trying to match an optional comma followed by > > one or more spaces... > > > > The sample program regx.rb leads me to believe that > > this will work: /,? */ > > Always be careful with patterns containing '*'. For example, > > 'caaaaaat' =~ /a*/ # => 0 > p $& # => "" > > /a*/ matched the string by matching exactly _zero_ 'a's at the start. > > > But: p "4.2, 3.1, 5.3".split(/,? */) > > Your pattern also matches a zero length string: 'no commas and no > spaces'. This is why split isn't doing what you want. > > However, in your problem definition, you said you wanted an optional > comma followed by _one_ or more spaces. That's a different beast: I guess I didn't read the docs carefully enough. The reason I didn't mention this was that I had presumed that Ruby's regular expressions were greedy by default, unless you explicitly indicated otherwise, just as I thought Perl's were. (I don't have my manuals and docs with me, so I haven't checked this, and could be wrong about that too. However, if Ruby and Perl do differ in this regard, is there a good reason for this?) I happen to know that Hal uses vi, an ultra-primitive version of gvim, which is what I use. These both do greedy matching, and this may have also biased our thinking, his implicitly and mine explicitly. Maybe others are off early for the long Labor Day weekend, but I'm surprised that at least 1 or 2 others didn't respond before Dave did on something that seems pretty basic. Perhaps a future FAQ warning in a "common misconceptions" section would be useful. Conrad