Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
A bug in Ruby regexp lib?
Arturas Šlajus
1/27/2009 6:35:00 PM
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
x11@www:~$ irb
irb(main):001:0> s = "www.myspace.com/djmamania
www.myspace.com/djmantini"
=> "www.myspace.com/djmamania www.myspace.com/djmantini"
irb(main):002:0> s1 = s.gsub(%r{(\s|^)(www\..*?)(\s|$)}m, '\1<a
href="http://\2">\2</a>\3')
=> "<a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
www.myspace.com/djmantini"
irb(main):003:0> s1.gsub(%r{(\s|^)(www\..*?)(\s|$)}m, '\1<a
href="http://\2">\2</a>\3')
=> "<a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
<a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmantini</a>"
Why I have to call gsub two times for this to work? Same regexp works
fine in Firefox JS :)
--
Posted via
http://www.ruby-...
.
3 Answers
Tim Greer
1/27/2009 7:41:00 PM
0
Artc5abras c5a0lajus wrote:
> ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
>
> x11@www:~$ irb
> irb(main):001:0> s = "www.myspace.com/djmamania
> www.myspace.com/djmantini"
> => "www.myspace.com/djmamania www.myspace.com/djmantini"
> irb(main):002:0> s1 = s.gsub(%r{(\s|^)(www\..*?)(\s|$)}m, '\1<a
> href="http://\2">\2</a>\3')
> => "<a
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
> www.myspace.com/djmantini"
> irb(main):003:0> s1.gsub(%r{(\s|^)(www\..*?)(\s|$)}m, '\1<a
> href="http://\2">\2</a>\3')
> => "<a
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
> <a
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmantini</a>"
>
> Why I have to call gsub two times for this to work? Same regexp works
> fine in Firefox JS :)
Did you mean:
s1 = s.gsub(%r{(^|\s)?(www\..*?)(\s|$)}m, '\1<a
href="http://\2">\2</a>\3')
irb(main):035:0> s1 = s.gsub(%r{(^|\s)?(www\..*?)(\s|$)}m, '\1<a
href="http://\2">\2</a>\3')
=> "<a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
<a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmantini</a>"
Note the \1 is using (^|\s), as it's either the start of the string (^)
or a white space between the two URLs (\s), but you also have \3, which
is either the end of the string ($) or white space between the URLs (or
following) (\s), and since there's only one white space between the two
URLs, it throws is off.
To account for both \1 and \3, above I've set it to be optional (^|\s)?
because this will allow you to use \3 without is breaking it. There
are other ways to do this, but just working with what you were using,
that's a change you could make to get the desired results on the first
one... unless I misunderstood what you were trying to do?
--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!
Tim Greer
1/27/2009 7:45:00 PM
0
Tim Greer wrote:
> Artc5abras c5a0lajus wrote:
>
>> ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
>>
>> x11@www:~$ irb
>> irb(main):001:0> s = "www.myspace.com/djmamania
>> www.myspace.com/djmantini"
>> => "www.myspace.com/djmamania www.myspace.com/djmantini"
>> irb(main):002:0> s1 = s.gsub(%r{(\s|^)(www\..*?)(\s|$)}m, '\1<a
>> href="http://\2">\2</a>\3')
>> => "<a
>>
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
>> www.myspace.com/djmantini"
>> irb(main):003:0> s1.gsub(%r{(\s|^)(www\..*?)(\s|$)}m, '\1<a
>> href="http://\2">\2</a>\3')
>> => "<a
>>
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
>> <a
>>
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmantini</a>"
>>
>> Why I have to call gsub two times for this to work? Same regexp works
>> fine in Firefox JS :)
>
> Did you mean:
>
> s1 = s.gsub(%r{(^|\s)?(www\..*?)(\s|$)}m, '\1<a
> href="http://\2">\2</a>\3')
>
> irb(main):035:0> s1 = s.gsub(%r{(^|\s)?(www\..*?)(\s|$)}m, '\1<a
> href="http://\2">\2</a>\3')
> => "<a
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a>
> <a
>
href=\"
http://www.myspace.com...
\">www.myspace.com/djmantini</a>"
>
> Note the \1 is using (^|\s), as it's either the start of the string
> (^) or a white space between the two URLs (\s), but you also have \3,
> which is either the end of the string ($) or white space between the
> URLs (or following) (\s), and since there's only one white space
> between the two URLs, it throws is off.
>
> To account for both \1 and \3, above I've set it to be optional
> (^|\s)?
> because this will allow you to use \3 without is breaking it. There
> are other ways to do this, but just working with what you were using,
> that's a change you could make to get the desired results on the first
> one... unless I misunderstood what you were trying to do?
Geez, pardon the typos I've made above. Apparently I'm having trouble
working my keyboard (some of those "is" should be "it")
--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!
Arturas Šlajus
1/27/2009 8:00:00 PM
0
Tim Greer wrote:
> Note the \1 is using (^|\s), as it's either the start of the string (^)
> or a white space between the two URLs (\s), but you also have \3, which
> is either the end of the string ($) or white space between the URLs (or
> following) (\s), and since there's only one white space between the two
> URLs, it throws is off.
>
> To account for both \1 and \3, above I've set it to be optional (^|\s)?
> because this will allow you to use \3 without is breaking it. There
> are other ways to do this, but just working with what you were using,
> that's a change you could make to get the desired results on the first
> one... unless I misunderstood what you were trying to do?
Ah, thank you. It seems that Ruby is parsing that string after getting
last \s down there. But shouldn't \3 insert it right back? :)
Anyways, I have another problem then ;]
it "should link http links" do
"
http://www.myspace.com...
".html... == '<p><a
href="
http://www.myspace.com...
">www.myspace.com/djmamania</a></...
end
2)
'String#htmlize should link http links' FAILED
expected: "<p><a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmam
ania</a></p>",
got: "<p>http://<a
href=\"
http://www.myspace.com...
\">www.myspace.com/djmamania</a></p>"
(using ==)
What do you suggest?
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
A bug in Ruby regexp lib?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password