我使用的是Ruby 2.1。
我的字符串是"Here's my user profile (http://example.com/user/5316), it's good. :)"
我想在括号中仅捕获URL。
我的第一个努力是/(http:\/\/example.com.*)\)/
。 example.com,然后是任何字符,在遇到右括号时结束。但不,这是行不通的。我想,也许这是贪婪的,懒惰会有所帮助。但附加懒惰操作符并没有帮助。我尝试使用[)]
代替\)
,但这也无济于事。我有点难过。
我做错了什么?
答案 0 :(得分:2)
懒惰的运算符工作正常:
irb> m = "Here's my user profile (http://example.com/user/5316), it's good. :)".match(/(http:\/\/example.com.*?)\)/)
=> #<MatchData "http://example.com/user/5316)" 1:"http://example.com/user/5316">
irb> m[1]
=> "http://example.com/user/5316"
正则表达式应为/(http:\/\/example.com.*?)\)/
- 惰性运算符包含?
答案 1 :(得分:1)
require "uri"
str = "Here's my user profile (http://example.com/user/5316), it's good. :)"
p URI.extract(str)
答案 2 :(得分:0)
使用像[^\s)]*
这样的否定字符类,它匹配任何字符但不匹配空格或)
,零次或多次。
> "Here's my user profile (http://example.com/user/420), it's good. :)".match(/\bhttp:\/\/example\.com\b[^\s)]*/)[0]
=> "http://example.com/user/420"