I’m putting together a web forum and want to parse web addresses that
are part of messages into clickable links. This is my attempt, I’m not
claiming its perfect but it works:
text.gsub!(/http:?/*(\w+[\w-./~?%&=#;,+:@]+)/,
’ http://\1’)
The problem is that some web addresses are incredibly long, so I want
the link text to be limited to, say, 50 chars. i.e. the second \1 needs
to be \1[0…49] or something. I can’t figure out any easy way of doing
it, any ideas?
On 7 August 2010 15:33, Bryan K. [email protected] wrote:
it, any ideas?
Posted via http://www.ruby-forum.com/.
$ ri gsub!
Implementation from String
str.gsub!(pattern, replacement) → str or nil
str.gsub!(pattern) {|match| block } → str or nil
str.gsub!(pattern) → an_enumerator
Performs the substitutions of String#gsub in place, returning
str, or nil if no substitutions were performed. If no block and
no replacement is given, an enumerator is returned instead.
text.gsub(/http:?/*(\w+[\w-./~?%&=#;,+:@]+)/) { %Q{http://#{$1[0…50]}} }
=> “<a href="http://\u0001"
target="_blank">http://mydgfsjceeeefknuxqbkqkhdslkjdhxfilunhefilxqhleiufn”
I am using %Q{str}, as “str” because you already have quotes. You
should also use %r{regex} for you Regexp, as it contains ‘/’.
Benoit D.
On 7 August 2010 16:02:31 UTC+2, Benoit D. [email protected]
wrote:
to be \1[0…49] or something. I can’t figure out any easy way of doing
str.gsub!(pattern, replacement) → str or nil
text.gsub(/http:?/*(\w+[\w-./~?%&=#;,+:@]+)/) { %Q{http://#{$1[0…50]}} }
I am using %Q{str}, as “str” because you already have quotes. You should also use %r{regex} for you Regexp, as it contains ‘/’.
Benoit D.
Missed the first ‘\1’ :
text.gsub(/http:?/*(\w+[\w-./~?%&=#;,+:@]+)/) {|match| %Q{http://#{$1[0…50]}} }
Hi –
On Sat, 7 Aug 2010, Bryan K. wrote:
it, any ideas?
You can use the block form, plus the thread-local $ variables:
text = “a bunch of miscellaneous words”
text.gsub!(/a b(.+)/) { $1[0,10] }
puts text # unch of mi
David
–
David A. Black, Senior Developer, Cyrus Innovation Inc.
The Ruby training with Black/Brown/McAnally
Compleat Philadelphia, PA, October 1-2, 2010
Rubyist http://www.compleatrubyist.com