regex failure notifcation

J

Junkone

When i match a pattern and if it returns a nil, obviously the regex
did not match the pattern. is there a way of identifying which set did
not match
pattern=Regexp.new('([g|l])\s+([0-9\.]+)')
irb(main):073:0> pattern.match('g 32')
=> #<MatchData:0x2e158b4>
irb(main):074:0> pattern.match('g we')
=> nil
irb(main):075:0>



If i can detect that the $2 failed and $1 was ok, i can pass more
intelligent error messages.
 
A

Andrew Timberlake

When i match a pattern and if it returns a nil, obviously the regex
did not match the pattern. is there a way of identifying which set did
not match
pattern=Regexp.new('([g|l])\s+([0-9\.]+)')
irb(main):073:0> pattern.match('g 32')
=> #<MatchData:0x2e158b4>
irb(main):074:0> pattern.match('g we')
=> nil
irb(main):075:0>

If i can detect that the $2 failed and $1 was ok, i can pass more
intelligent error messages.


You could change the regular expression to
pattern=Regexp.new('([g|l])?\s+([0-9\.]+)?')
m = pattern.match('g 32')
m[1] = 'g'
m[2] = '32'
m = pattern.match('g we')
m[1] = 'g'
m[2] = nil # <- Check for nil here to know that only the first part matched.
m = pattern.match('a 32')
m[1] = nil # <- First part failed
m[2] = '32'
m = pattern.match('32 g')
m = nil # <- The whole pattern failed

You'll have to check that this new regular expression correctly matches your
use case though.

Andrew Timberlake
(e-mail address removed)
082 415 8283
skype: andrewtimberlake

"I have never let my schooling interfere with my education."
--Mark Twain
 

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

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,738
Latest member
JinaMacvit

Latest Threads

Top