From: stephen O'D Date: 2008-12-18T07:22:15+09:00 Subject: Re: Hopefully simple regex On Dec 17, 10:15 pm, "stephen O'D" wrote: > Hi, > > I am trying to make a regex that will capture strings that look like > '@string' surrounded by whitespace or at the start or end of a line - > here is the spec: > > require 'test/unit' > > class RegexTest < Test::Unit::TestCase > > def setup > # this doesn't work correctly for the fails scenarios > @regex = /(@{1,1}\w+)/ > end > > def test_regex_matches > str = [ > "@bar some more text", > "@bar", > "sometext @bar text", > "sometext @bar" > ] > str.each do |s| > s =~ @regex > assert_equal('@bar', $1) > end > end > > def test_regex_fails > str = [ > "@@bar", > "sometext @@bar text", > "sometext@bar text", > "sometext@bar" > ] > str.each do |s| > s =~ @regex > assert_equal(nil, $1) > end > end > > end > > I have tried all sorts of combinations of character class and negated > classes etc until my eyes have started glazing over - I really though > this should be easy - can anyone suggest a regex that pass my spec > above? > > Thanks, > > Stephen. It seems like this regex works: /^(?:.*\s+(@{1,1}\w+)|(@{1,1}\w+))/ Although you have to change the spec a little to check $1 and $2 for matches. Still seems a bit over complex to me - any better suggestions?