如果我有匹配运算符,如何将括号中捕获的字符串部分保存在变量中而不是使用$1,$2等等?
... = m/stuff (.*) stuff/;
Run Code Online (Sandbox Code Playgroud)
左边的是什么?
joa*_*him 34
诀窍是通过使用列表赋值使m //在列表上下文中工作:
($interesting) = $string =~ m/(interesting)/g;
Run Code Online (Sandbox Code Playgroud)
这可以整齐地扩展到抓住更多的东西,例如:
($interesting, $alsogood) = $string =~ m/(interesting) boring (alsogood)/g;
Run Code Online (Sandbox Code Playgroud)
使用包围构造(...)来创建捕获缓冲区.然后使用特殊的变量$1,$2等来访问捕获的字符串.
if ( m/(interesting)/ ) {
my $captured = $1;
}
Run Code Online (Sandbox Code Playgroud)
通常,您还需要进行测试以确保输入字符串与您的正则表达式匹配。这样,您还可以处理错误情况。
要提取有趣的东西,您还需要某种方式来锚定您对提取感兴趣的位。
因此,在您的示例中,这将首先确保输入字符串与我们的表达式匹配,然后提取两个“无聊”位之间的位:
$input = "boring interesting boring";
if($input =~ m/boring (.*) boring/) {
print "The interesting bit is $1\n";
}
else {
print "Input not correctly formatted\n";
}
Run Code Online (Sandbox Code Playgroud)