There's no reason to make the \D*s non-greedy, is there?
When in doubt, make your regexes non-greedy. You'll stay out of a lot of trouble that way.
| [reply] |
When in doubt, make your regexes non-greedy. You'll stay out of a lot of trouble that way.
Wow. I found this answer disappointing, dws. There are too many beginners who, once they learn about minimal matching, use it far too often.
The common example is using a non-greedy quantifier instead of greedily matching a negated character class. For example, /"[^"]*"/ is much better than using /".*?"/ to do the same thing. I should probably re-read MRE again as it has been 3 or 4 years but I think it illustrates that removing beginning and trailing whitespace with s/^\s*(.*?)\s*$/$1/ is several times slower than s/^\s*//; s/\s*$//; is.
Revisiting the original question, I suspect a mixed solution like, /(\d+)\D*?to\D*(\d+)/ would actually be better, depending, of course, on whether you defined better as shorter, faster, or easier to understand. I'm not sure though. Like I said, it's been too long since I've read MRE. I'm sure someone here could give us a concise analysis.
I am interested in understanding why you suggest the rule of thumb that you do but I think I'll still agree with Arien on this point. You'll only stay out of trouble by not being in doubt.
-sauoq
"My two cents aren't worth a dime.";
| [reply] [d/l] [select] |
There are too many beginners who, once they learn about minimal matching, use it far too often. ... You'll only stay out of trouble by not being in doubt.
We all have to pass through doubt. The trick is to keep going once you're in it.
My advice to favor minimal matching is pragmatic. I've seen a lot more people get themselves into trouble using greedy matching than with non-greedy matching (when forming the part of the regex intended to skip over stuff that's not interesting). Since one way through doubt is to try a few experiments, the odds favor going minimal. This also plays the odds that you experiment succeeds on a small number of tests cases, but fails in the wild.
| [reply] |
When in doubt, make your regexes non-greedy. You'll stay out of a lot of trouble that way.
You will steer clear of some traps if you do that, but just to fall into others: instead of sometimes matching too much, you will sometimes match too little.
There is no magic cure for lack of knowledge or understanding. When in doubt, check the documentation and think.
— Arien
| [reply] |