我正在尝试创建一个正则表达式,检查某些文本是否只包含网址和空格,而不是其他内容:
http://www.google.com http://www.stackoverflow.com
会匹配,但是:
http://www.google.com and http://www.stackoverflow.com
不匹配。
这可能吗?
答案 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'之前的空格。
用空格分割字符串,并检查每个字符串是否与上面的正则表达式匹配。
希望它有所帮助!