Perl正则表达式禁用括号提取

fer*_*arr 1 regex perl extract

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

我知道URL有更好的正则表达式,但请考虑这个例子:

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

该部分(https?)?是像链接www.google.com,但有括号它返回"http"$1其投入@links!这是一个问题,因为我想要整个链接.

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

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

mvp*_*mvp 5

你的方法过于天真,它不会捕获许多其他URL.相反,使用Regexp :: Common,如下所示:

use Regexp::Common qw/URI/;

my @links = ($content =~ /$RE{URI}/g);
Run Code Online (Sandbox Code Playgroud)

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