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