Regex 使用正则表达式从文本中筛选URL
所以,我有一个初始正则表达式过滤器,我使用,但我需要一些更多的可选性。这很好,但还不够好:Regex 使用正则表达式从文本中筛选URL,regex,Regex,所以,我有一个初始正则表达式过滤器,我使用,但我需要一些更多的可选性。这很好,但还不够好: ([a-zA-Z0-9]*@*)((http | https | ftp | ftps)\/?\/?)?([a-zA-Z0-9\-\.]*(\.[a-zA-Z]+)(\/\S*)? 我想要实现的是过滤这些字符串: foo@demo.net bar.ba@test.co.uk www.demo.com http://foo.co.uk/ http://demo.com/foo.html?q=
([a-zA-Z0-9]*@*)((http | https | ftp | ftps)\/?\/?)?([a-zA-Z0-9\-\.]*(\.[a-zA-Z]+)(\/\S*)?
我想要实现的是过滤这些字符串:
foo@demo.net
bar.ba@test.co.uk
www.demo.com
http://foo.co.uk/
http://demo.com/foo.html?q=bar
http://localhost/
我还想过滤URL中是否有空白,如下所示:
foo@demo.net
bar.ba@test.co.uk
www. demo .com
http://foo .co. uk/
http:// demo. com/foo.html?q=bar
http://localhost/
如果您不关心它是用什么语言实现的,并且已经存在并且可以做您想做的事情。我写的。:)
我以前实现过这个,这是一个非常重要的问题。混合使用电子邮件和HTML更难,我建议你分开使用。我将在下面讨论URI,但它同样适用于电子邮件 使用双通道系统。首先,它在文本中找到可能的候选者,然后检查它是否实际上是一个URL。这避免了构建一个完整的URI正则表达式,URI验证器在大多数语言中都是可用的。不要自己写 用于构建以基本形式串在一起的适当URI字符集的正则表达式:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
例如,方案
是
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
作为正则表达式,[A-Za-z]([A-Za-z0-9+-.])*
。等等
将正则表达式构建为片段,以避免您的理智
一旦用正则表达式捕获了一个候选者,就应该通过现有的URI解析器来运行它,看看它是否真的是一个URI
你可能想调查一下。在RFC本身上运行finder也很有用
URI中的空间几乎不可能处理。这将大大增加误报的数量
或者,您可以从中使用正则表达式。它很长,所以。您还可以使用
perl-wle'use Regexp::Common qw(URI)获得它;在安装Regexp::Common之后打印$RE{URI}'
。如果您不关心它是用什么语言实现的,并且已经存在并且可以做您想要的事情。我写的。:)
我以前实现过这个,这是一个非常重要的问题。混合使用电子邮件和HTML更难,我建议你分开使用。我将在下面讨论URI,但它同样适用于电子邮件 使用双通道系统。首先,它在文本中找到可能的候选者,然后检查它是否实际上是一个URL。这避免了构建一个完整的URI正则表达式,URI验证器在大多数语言中都是可用的。不要自己写 用于构建以基本形式串在一起的适当URI字符集的正则表达式:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
例如,方案
是
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
作为正则表达式,[A-Za-z]([A-Za-z0-9+-.])*
。等等
将正则表达式构建为片段,以避免您的理智
一旦用正则表达式捕获了一个候选者,就应该通过现有的URI解析器来运行它,看看它是否真的是一个URI
你可能想调查一下。在RFC本身上运行finder也很有用
URI中的空间几乎不可能处理。这将大大增加误报的数量
或者,您可以从中使用正则表达式。它很长,所以。您还可以使用
perl-wle'use Regexp::Common qw(URI)获得它;安装Regexp::Common后,打印$RE{URI}'
。只需在字符类中添加空格([a-zA-Z0-9\-\.]*)(\.[a-zA-Z]+)
添加空格将过滤的不仅仅是URL。我需要它来过滤聊天信息查找匹配中的空间或将其计算出来?如何删除所有空间,然后运行非贪婪的正则表达式?我运行正则表达式的聊天信息如下:“你好。我是约翰。请访问我的网站www.google.com”
或”http://www. google.com“
只需在字符类中添加空格([a-zA-Z0-9\-\.]*(\.[a-zA-Z]+)
添加空格将过滤的不仅仅是URL。我需要它来过滤聊天信息查找匹配的空格或将其计算出来?如何删除所有空格,然后运行一个非贪婪的正则表达式?我在一条聊天信息上运行正则表达式,如:“你好。我是约翰。访问我的网站www.google.com”
或“http://www. google.com“