Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式从文本中筛选URL_Regex - Fatal编程技术网

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“