I'm a novice when it comes to Ruby so I'm hoping that one of you guys
can explain the following to me.
The following line works as I expected it to and prints "This is a
test" with one word per line:
" -XThis -Xis -Xa -Xtest ".scan( /-X(.*?)\s/ ) { |x| puts x }
However this line only prints 4 lines of empty text:
" -XThis -Xis -Xa -Xtest ".scan( /\s-X(.*?)/ ) { |x| puts x }
However this line only prints 4 lines of empty text:
" -XThis -Xis -Xa -Xtest ".scan( /\s-X(.*?)/ ) { |x| puts x }
Can someone explain this to me?
The question-mark in (.*?) makes the capture "ungreedy". It matches as
few characters as possible to make the entire regexp match. In this
case, matching zero characters is a successful match, so that's what you
get.
(.*) is "greedy" and will match as many characters as possible. So if
you use it here, it will eat everything up to the end of the line.
I'm a novice when it comes to Ruby so I'm hoping that one of you guys
can explain the following to me.
The following line works as I expected it to and prints "This is a
test" with one word per line:
" -XThis -Xis -Xa -Xtest ".scan( /-X(.*?)\s/ ) { |x| puts x }
However this line only prints 4 lines of empty text:
" -XThis -Xis -Xa -Xtest ".scan( /\s-X(.*?)/ ) { |x| puts x }