Im just after a bit of clarification with quantifiers in regular
expressions.
I just want to be sure of the differences between the quantifiers. so
for these various regular expressions,
[a-z]* - this will match any amount lower case letters
[a-z]+ - this will match any amount lower case letters
(whats difference between + and * in this case?)
[a-z]+? -
or
\d* - This will match any amount of digits
\d*? - This will only match none or one number
Please can someone offer some clarification Im still unsure of myself
with these expresions as I'm new to ruby,
Thanks,
Dan
Im just after a bit of clarification with quantifiers in regular
expressions.
I just want to be sure of the differences between the quantifiers. so
for these various regular expressions,
[a-z]* - this will match any amount lower case letters
[a-z]+ - this will match any amount lower case letters
(whats difference between + and * in this case?)
[a-z]+? -
or
\d* - This will match any amount of digits
\d*? - This will only match none or one number
Please can someone offer some clarification Im still unsure of myself
with these expresions as I'm new to ruby,
Thanks,
Dan
Dan
* matches 0 or more of the preceding pattern
+ matches 1 or more of the preceding pattern
? matches 0 or 1 of the preceding pattern
{n,m} matches n to m of the preceding pattern
I stand to be corrected but I don't believe that *? or +? are valid at all.
Andrew Timberlake
andrew@andrewtimberlake.com
082 415 8283
skype: andrewtimberlake
"I have never let my schooling interfere with my education."
--Mark Twain
There are 4 (I hope that didn't miss anything) operators to specify repetitions.
*, +, ? and {m, n}
* - matches 0 or more
+ - matches 1 or more
? - matches 0 or 1 (same as {0,1} )
{m,n} matches m..n
All these operators all greedy (I'll show you examples). To make
non-greedy operator you must add '?' after operator. So non-greedy
operators are:
*?, +?, ??, {m,n}?
*? - matches 0 or more
+? - matches 1 or more
?? - matches 0 or 1 (same as {0,1}?)
{m,n} matches m..n
Maybe '??' looks strange, but all of these are absolutely correct.
So far no differences.
Why we have greedy and non-greedy operators? Because they works in
different way. Greedy operators tries to match as many character
(precisely: left expression) as can and if during matching it must
move back it tries to match fewer characters.
For example:
puts "aaaa".match(/a*/) # matches whole string
puts "aaaa" =~ /a*?/ # matches no characters (but it success)
I always recommend Jeffrey Friedl's book "Mastering Regular
Expressions" (http://regex.info/). After reading this book you will be
master of regexp ;-).
\d* - This will match any amount of digits
\d*? - This will only match none or one number
Please can someone offer some clarification Im still unsure of myself
with these expresions as I'm new to ruby,
Thanks,
Dan
Dan
* matches 0 or more of the preceding pattern
+ matches 1 or more of the preceding pattern
? matches 0 or 1 of the preceding pattern
{n,m} matches n to m of the preceding pattern
I stand to be corrected but I don't believe that *? or +? are valid at
all.
yeah that helps thanks, I think I was just making things up..
There are 4 (I hope that didn't miss anything) operators to specify repetitions.
*, +, ? and {m, n}
* - matches 0 or more
+ - matches 1 or more
? - matches 0 or 1 (same as {0,1} )
{m,n} matches m..n
All these operators all greedy (I'll show you examples). To make
non-greedy operator you must add '?' after operator. So non-greedy
operators are:
*?, +?, ??, {m,n}?
*? - matches 0 or more
+? - matches 1 or more
?? - matches 0 or 1 (same as {0,1}?)
{m,n} matches m..n
Maybe '??' looks strange, but all of these are absolutely correct.
So far no differences.
Why we have greedy and non-greedy operators? Because they works in
different way. Greedy operators tries to match as many character
(precisely: left expression) as can and if during matching it must
move back it tries to match fewer characters.
For example:
puts "aaaa".match(/a*/) # matches whole string
puts "aaaa" =~ /a*?/ # matches no characters (but it success)
But can match more if it needs to to make the match a success:
I always recommend Jeffrey Friedl's book "Mastering Regular
Expressions" (http://regex.info/\). After reading this book you will be
master of regexp ;-).