1

我正在尝试在另一个答案中找到的东西,但我遇到了一些问题:

我知道 URL 有更好的正则表达式,但例如考虑一下:

@links=($content =~ m/(https?)?.*[.]com/g);
*$content has text or html

该部分(https?)?用于链接之类www.google.com的,但有括号返回"http"$1其中@links!这是一个问题,因为我想要整个链接。

什么会从文本中全局提取简单链接(或指定的任何正则表达式)并将它们放入列表中?
简单来说,我的意思是:

  • http://www.google.com
  • www.google.com
  • google.com
  • https://www.google.com
4

2 回答 2

5

您的方法太天真了,它不会捕获许多其他 URL。相反,请使用 Regexp::Common,如下所示:

use Regexp::Common qw/URI/;

my @links = ($content =~ /$RE{URI}/g);

这适用于 HTTP、HTTPS、FTP 等,并正确捕获 URL 参数的更高级组合。

于 2012-10-29T00:57:20.647 回答
3

非捕获版本如下所示:

m/(?:https?)?.*[.]com/g

为了捕获链接,我使用了这个从 URI::Find 派生的正则表达式:

m<https?://[;/\?:\@&=+\$,\[\]A-Za-z0-9\-_.!~*'()%#]*[/\?:\@&=+\$\[A-Za-z0-9\-_!~*(%#]>
于 2012-10-29T02:45:50.420 回答