我正在尝试在another answer找到的东西,但我遇到了一些问题:
我知道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
答案 0 :(得分:5)
您的方法太天真,它不会捕获许多其他网址。 相反,使用Regexp :: Common,如下所示:
use Regexp::Common qw/URI/;
my @links = ($content =~ /$RE{URI}/g);
这适用于HTTP,HTTPS,FTP等,并正确捕获URL参数的更高级组合。
答案 1 :(得分:3)
非捕获版本如下所示:
m/(?:https?)?.*[.]com/g
为了捕获链接,我使用这个从URI :: Find:
派生的正则表达式m<https?://[;/\?:\@&=+\$,\[\]A-Za-z0-9\-_.!~*'()%#]*[/\?:\@&=+\$\[A-Za-z0-9\-_!~*(%#]>