读者,
我有以下正则表达式问题:
码
#!/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";
}
}
I like wilma.
this line does not match
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,但这没有用,因为我得到了一个“匹配”。
答案 0 :(得分:8)
你的正则表达式中没有任何括号。没有括号,没有$ 1。
我猜你想要&#34;字&#34;以-a结尾的值,因此为/\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'