Regex 将匹配的Perl正则表达式另存为变量

Regex 将匹配的Perl正则表达式另存为变量,regex,perl,scripting,Regex,Perl,Scripting,我有一个简单的Perl正则表达式,需要保存为变量 如果我打印它: print($html_data =~ m/<iframe id="pdfDocument" src=.(.*)pdf/g); print(

我有一个简单的Perl正则表达式,需要保存为变量

如果我打印它:

print($html_data  =~ m/<iframe id="pdfDocument" src=.(.*)pdf/g);

print($1
$2
等中。您也可以获得整个匹配模式(
$&
),但这非常昂贵,应该避免


顺便说一句,这里的行为区别是标量与列表上下文的结果;您应该了解它们,它们之间的区别,以及它们如何影响各种Perl表达式的行为。

请注意/g以获得所有匹配项。这些不可能放在标量中。您需要一个数组

my @links = $html_data =~ m/<iframe id="pdfDocument" src=.(.*)pdf/g;

“perlfunc”文档中的my@links=$html\u data=~m/:

打印列表
打印字符串或字符串列表

因此,
打印m//
,其中m//确定返回值
通缉犯(wantarray?)是一个列表
(在没有捕获组的情况下显示为m//返回1或0匹配过程
或者失败,其中as m//g返回一个匹配列表)

$link
=m//只能是标量(与列表相反)上下文。

因此,m//返回匹配结果1(true)或0(false)。

我刚刚编写了这样的代码。这可能会有所帮助。它基本上与您的一样,只是我的代码还有几个括号

my $path = `ls -l -d ~/`;
#print "\n path is $path";
($user) = ($path=~/\.*\s+(\w+)\susers/);
因此,如果您试图存储整个内容,那么您在本示例中的内容可能是这样的?我不确定,但您可以使用我的作为示例。我正在存储(\w+)中的任何内容:


($link)=($html\u data=~(如果您尝试执行与标量上下文相同的操作,那么标量上下文中的/g就可以了。不过,您不需要它来获取捕获列表。@brian d foy,我没有说标量上下文中的/g没有用。我甚至没有说它在这里没有用。我说标量上下文在这里没有用。(尽管它仍然可以在标量上下文中完成:
my$link=$html\u data=~m/../?$1:undef;
my ($link) = $html_data =~ m/<iframe id="pdfDocument" src=.(.*)pdf/;
my $path = `ls -l -d ~/`;
#print "\n path is $path";
($user) = ($path=~/\.*\s+(\w+)\susers/);
($link) = ($html_data =~ (m/<iframe id="pdfDocument" src=.(.*)pdf/g));