读者们,
我有以下正则表达式问题:
code
#!/usr/bin/perl -w
use 5.010;
use warnings;
my $filename = 'input.txt';
open my $FILE, "<", $filename or die $!;
while (my $row = <$FILE>)
{ # take one input line at a time
chomp $row;
if ($row =~ /\b\w*a\b/)
{
print "Matched: |$`<$&>$'|\n"; # the special match vars
print "\$1 contains '$1' \n";
}
else
{
#print "No match: |$row|\n";
}
}
输入.txt
I like wilma.
this line does not match
output
Matched: |I like <wilma>|
Use of uninitialized value $1 in concatenation (.) or string at ./derp.pl line 14, <$FILE> line 22.
$1 contains ''
我完全困惑了。如果匹配并且我正在条件中检查内容。为什么我得到 1 美元的空结果?这不应该发生。我究竟做错了什么?我怎样才能得到'wilma'
1 美元?
我看了here但这没有帮助,因为我得到了“匹配”。
您的正则表达式中没有任何括号。没有括号,就没有 1 美元。
我猜你想要以 -a 结尾的“word”值,所以那就是/\b(\w*a)\b/
.
或者,由于您的整个正则表达式仅匹配您想要的位,因此您可以使用$&
代替$1
,就像您在调试输出中所做的那样。
另一个例子:
my $row = 'I like wilma.';
$row =~ /\b(\w+)\b\s*\b(\w+)\b\s*(\w+)\b/;
print join "\n", "\$&='$&'", "\$1='$1'", "\$2='$2'", "\$3='$3'\n";
上面的代码产生以下输出:
$&='I like wilma'
$1='I'
$2='like'
$3='wilma'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)