Hi,
A Simple question on regular expression in ruby. Some can make me
understand the below code snippets. I was under the impression that
both these statement would give the same answer. But it doesnt. Why ?
irb(main):001:0> ‘banana’ =~ /(an)*/
=> 0
irb(main):002:0> ‘banana’ =~ /(an)+/
=> 1
-Manjo
On 1/10/07, Manoj P M [email protected] wrote:
A Simple question on regular expression in ruby. Some can make me
understand the below code snippets. I was under the impression that
both these statement would give the same answer. But it doesnt. Why ?
irb(main):001:0> ‘banana’ =~ /(an)*/
=> 0
In this case you are looking for ‘’, ‘an’, ‘anan’, ‘ananan’ and so on.
So it matches at the beginning of the string (index 0) with the empty
string.
Luis
On 1/10/07, Manoj P M [email protected] wrote:
Hi,
A Simple question on regular expression in ruby. Some can make me
understand the below code snippets. I was under the impression that
both these statement would give the same answer. But it doesnt. Why ?
irb(main):001:0> ‘banana’ =~ /(an)*/
=> 0
this is happening because * means 0 or more times match the preceding
literal. here always the regex match =~ returns the position in the
string
where it finds the match and starts from 0 (as in C and ruby the array
parameter starts count from 0 like if array=‘sachin’ and then array[0]
will
give ‘s’)
so in the first case it matches ‘b’ and returns zero since it tries to
match
‘an’ matched 0 times so returns the position taken by ‘b’
irb(main):002:0> ‘banana’ =~ /(an)+/
=> 1
in this case the place where it matches ‘an’ is starting at b(0) a(1)
n(2)
a(3) n(4) a(5) so returns 1 since ‘an’ is matched beginning at 1
location.
I hope this clarifies
-Manjo
–
[email protected]
URL : http://nichas143.tripod.com