我正在尝试添加条件逻辑,以确定字符串中的URL是否与 一个 正则表达式匹配。以下是字符串的示例:
string_to_match = "http://www.twitpic.com/23456 ran to catch the bus, http://www.twitpic.com/3456 dodged a bullet at work."
如果我确定字符串中有一个网址,我只想匹配,因此在我尝试解决的情况下,上面的字符串不会匹配。我觉得这样的事情会奏效:
if string_to_match =~ /[http\:\/\/]?/
puts "you're matching more then once. bad man!"
end
但事实并非如此!如何确定字符串中只有一个匹配项?
答案 0 :(得分:2)
Mladen的答案很好(计算scan
的回报),但正则表达式已经包含多次或特定次数匹配同一事物的想法。在您的情况下,如果文本出现2次或更多次,则需要打印警告:
/(http:\/\/.+?){2,}/
使用.+
或.*
,具体取决于您是否要求网址包含某些内容。就目前而言,.+?
将以非贪婪的方式匹配1个或多个字符,这就是您想要的。一个贪婪的量词会在第一次尝试时吞噬整个字符串,然后在最终找到多个URL之前必须做一堆回溯。
答案 1 :(得分:1)
if string_to_match =~ /((http:\/\/.*?)http:\/\/)+/
仅当您有2次(或更多次)http://
时才会匹配答案 2 :(得分:1)
看看String#scan,您可以这样使用它:
if string_to_match.scan(/[http\:\/\/]/).count > 1
puts "you're matching more then once. bad man!"
end