[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Hopefully simple regex

stephen O'D

12/17/2008 10:15:00 PM

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.
4 Answers

David A. Black

12/17/2008 10:22:00 PM

0

Hi --

On Thu, 18 Dec 2008, 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
>
> 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?

Try this:

@regex = /(?:^|\s)(@\w+)/


David

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.r...
Coming in 2009: The Well-Grounded Rubyist (http://manning....)

stephen O'D

12/17/2008 10:30:00 PM

0

On Dec 17, 10:15 pm, "stephen O'D" <stephen.odonn...@gmail.com> 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?

stephen O'D

12/17/2008 10:40:00 PM

0


>
> Try this:
>
> @regex = /(?:^|\s)(@\w+)/
>
> David
>
> --
> David A. Black / Ruby Power and Light, LLC
> Ruby/Rails consulting & training:http://www.r...
> Coming in 2009: The Well-Grounded Rubyist (http://manning....)

Perfect - I didn't know you could (or even think to try) putting the
'start of string' anchor inside a group with an alternative! At least
I have learned something from the last hour of trying!

Richard Conroy

12/18/2008 12:01:00 PM

0

On Wed, Dec 17, 2008 at 10:37 PM, stephen O'D
<stephen.odonnell@gmail.com> wrote:
>
>>
>> Try this:
>>
>> @regex = /(?:^|\s)(@\w+)/
>>
>> David
>
> Perfect - I didn't know you could (or even think to try) putting the
> 'start of string' anchor inside a group with an alternative! At least
> I have learned something from the last hour of trying!
>

http://www.r... is an awesome way of composing and testing ruby
regular expressions. Highly recommended.