检查某些文本是否仅包含URL的正则表达式是什么?

时间:2013-04-27 00:31:15

标签: ruby regex

我正在尝试创建一个正则表达式,检查某些文本是否只包含网址和空格,而不是其他内容:

http://www.google.com http://www.stackoverflow.com

会匹配,但是:

http://www.google.com and http://www.stackoverflow.com

不匹配。

这可能吗?

5 个答案:

答案 0 :(得分:1)

你可以使用这个正则表达式(只测试空格之间是否以http://开头):

/^(?:https?:\/\/\S++\s*+)++$/ =~ text

答案 1 :(得分:1)

Ruby已经有了一种提取URL的方法,所以这是一个很好的起点,而不是重新发明工作轮:

require 'uri'

[
  'http://www.google.com http://www.stackoverflow.com',
  'http://www.google.com and http://www.stackoverflow.com'
].each do |url|
  print url
  if url.split.all? { |u| !URI.extract(u).empty? }
    puts " contains only URLs"
  else
    puts " doesn't contain only URLs"
  end
end

在跑步之后,是:

http://www.google.com http://www.stackoverflow.com contains only URLs
http://www.google.com and http://www.stackoverflow.com doesn't contain only URLs

这不支持所有the recognized URL schemes,但它是一个起点。您可以通过将一系列方案传递给extract来指定所需的内容。您可以使用以下方式获取IANA的永久列表:

require 'open-uri'
require 'nokogiri'

doc = Nokogiri::HTML(open('http://www.iana.org/assignments/uri-schemes.html'))
schemes = doc.at('table table').search('tr').map{ |tr| tr.at('td').text }[1..-1]

答案 2 :(得分:0)

words.split.all? { |word| word.match(/^http:/) }

答案 3 :(得分:0)

这将检查是否有任何URL,字符串应该是只有一个空格的URL作为URL分隔符

看看这个live demo

(((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)\s){1,}((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)$
  
    

参考:

  
     

http://www.regular-expressions.info/reference.html

     

http://regexlib.com/Search.aspx?k=URL&AspxAutoDetectCookieSupport=1

答案 4 :(得分:0)

如果你真的想使用正则表达式,请试试这个:

(?< protocol>\w+):\/\/(?< domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*

请删除'protocol'和'domain'之前的空格。

用空格分割字符串,并检查每个字符串是否与上面的正则表达式匹配。

希望它有所帮助!