正在寻找正则表达式来从文件中提取 http 有效 URI?

正在寻找正则表达式来从文件中提取 http 有效 URI?

我正在寻找一个可以从文件(任意文本)中提取 http URI 的正则表达式。请注意,文本中可以包含单词“http”,但该单词可能代表也可能不代表有效的 URI 地址。

更新:我理解 HTML 是上下文无关语法,而 RegEx 是正则表达式,但 URI 只是模式(正则表达式)。还是不是?

答案1

这比你想象的要难,没有一个正则表达式可以轻易地捕捉到它们。
考虑这样的网址

http://www.google.com/search?q=good+url+regex&rls=com.microsoft:*&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1

ftp://乔:[电子邮件保护]

谷歌

https://some-url.com?query=&name=joe?filter=#some_anchor

这是一篇关于这个主题的很好的短文一个好的 url 正则表达式?

^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)  
(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)  
(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|  
[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]  
|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])  
+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?  
(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]  
|%[a-f\d]{2})*)?$

以下是另一个较短的一种改进的自由、准确的 URL 匹配正则表达式模式

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.]  
[a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+  
(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

答案2

也许是这样的:

(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?

相关内容