Problem with getting RegEx to work

H

henrik415

All,

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 }

Can someone explain this to me?
Thanks.
 
B

Brian Candler

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.

You might prefer something like this:

" -XThis -Xis -Xa -Xtest ".scan( /-X(\S+)/ ) { |x| puts x }

\S+ matches one or more non-space characters in a greedy fashion, hence
it will eat up to the first non-space character or end of line.

HTH,

Brian.
 
W

William James

All,

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 }

Can someone explain this to me?
Thanks.

* means zero or more, so Ruby gives you
zero characters.

" -XThis -Xis -Xa -Xtest ".scan( /\s-X(\S*)/ )
==>[["This"], ["is"], ["a"], ["test"]]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,201
Messages
2,571,049
Members
47,652
Latest member
Campbellamy

Latest Threads

Top