I want to extract an “id” parameter from the URL. I use the following
code:
url = “http://example.com/id=12345”
id = url[ /(?<=id=)(\d+)/ ]
puts id
But I get a SyntaxError telling me “undefined (?..) sequence”.
Why?
I want to extract an “id” parameter from the URL. I use the following
code:
url = “http://example.com/id=12345”
id = url[ /(?<=id=)(\d+)/ ]
puts id
But I get a SyntaxError telling me “undefined (?..) sequence”.
Why?
Albert S. wrote:
I want to extract an “id” parameter from the URL. I use the following
code:url = “http://example.com/id=12345”
id = url[ /(?<=id=)(\d+)/ ]
puts idBut I get a SyntaxError telling me “undefined (?..) sequence”.
Why?
Because ruby 1.8 does not have look-behind. 1.9 has it, and your code
runs on 1.9.
If you need 1.8 with look-behind, I guess you can compile 1.8 with the
Oniguruma regexp engine (which is used in 1.9).
On Mar 10, 2009, at 00:17 , Albert S. wrote:
I want to extract an “id” parameter from the URL. I use the following
code:url = “http://example.com/id=12345”
id = url[ /(?<=id=)(\d+)/ ]
puts idBut I get a SyntaxError telling me “undefined (?..) sequence”.
(?:…)
not
(?<…)
but really, /(\d+)/ will suffice for your example. see:
2009/3/10 The Higgs bozo [email protected]:
Why?
Because ruby 1.8 does not have look-behind. 1.9 has it, and your code
runs on 1.9.If you need 1.8 with look-behind, I guess you can compile 1.8 with the
Oniguruma regexp engine (which is used in 1.9).
Lookbehind is not needed:
09:35:18 ~$ irb
Ruby version 1.8.7
irb(main):001:0> url = “http://example.com/id=12345”
=> “http://example.com/id=12345”
irb(main):002:0> id = url[/id=(\d+)/, 1]
=> “12345”
Depending on what else should be done with the url a more appropriate
tool might be class URI
irb(main):006:0> require ‘uri’
=> true
irb(main):007:0> u2 = URI.parse url
=> #<URI::HTTP:0x7ff186bc URL:http://example.com/id=12345>
irb(main):008:0> u2.path
=> “/id=12345”
irb(main):009:0> u2.path[/id=(\d+)/, 1]
=> “12345”
Kind regards
robert
The Higgs bozo wrote:
Why?
Because ruby 1.8 does not have look-behind. 1.9 has it, and your code
runs on 1.9.
Thanks for the info, Higgs.
Robert K. wrote:
Lookbehind is not needed:
[snip]
irb(main):002:0> id = url[/id=(\d+)/, 1]
=> “12345”
Cool! I once knew of the second parameter. Thanks for reminding me of
it.
I wish I could use RI (too slooouuuw on my system) or Fast-RI (I have
it, but at one point it decided to start throwing exceptions).
Albert S. wrote:
I want to extract an “id” parameter from the URL. I use the following
code:url = “http://example.com/id=12345”
id = url[ /(?<=id=)(\d+)/ ]
puts idBut I get a SyntaxError telling me “undefined (?..) sequence”.
Why?
url = “http://example.com/id=12345”
pieces = url.split(“/”)
id = pieces[-1].split(“=”)[1]
puts id
–output:–
12345
Albert S. wrote:
I’ve lately been making excellent use of the MatchData class, so here’s
my solution:
irb(main):012:0> m = /\d+/.match(“http://example.com/id=12345”)
=> #<MatchData “12345”>
irb(main):013:0> m[0]
=> “12345”
In other situations, some of the various class methods can be useful:
irb(main):014:0> m.pre_match
=> “http://example.com/id=”
irb(main):015:0>
There’s a #post_match method also…and more.
t.
–
Tom C., MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< [email protected] >> (email)
<< TomCloyd.com >> (website)
<< sleightmind.wordpress.com >> (mental health weblog)
Albert S. wrote:
I wish I could use RI (too slooouuuw on my system) or Fast-RI (I have
it, but at one point it decided to start throwing exceptions).
Oops. It started raising exceptions. Everybody knows that in Ruby you
don’t throw exceptions 
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs