Perl匹配仅返回"1".布尔?为什么?

Man*_*mal 6 regex perl parsing

这一点必须明显,但我只是没有看到它.

我有一个包含数千个记录的文档,如下所示:

Row:1 DATA:
[0]37755442
[1]DDG00000010
[2]FALLS
[3]IMAGE
[4]Defect
[5]3
[6]CLOSED
Run Code Online (Sandbox Code Playgroud)

我已经设法将每条记录分开,我现在正在尝试解析每个字段.

我正在尝试匹配编号的标题,以便我可以提取成功的数据,但问题是我的匹配只在他们成功时返回"1"而如果他们没有则返回任何内容.我尝试申请的任何比赛都会发生这种情况.

例如,应用于每个记录中的简单单词:

my($foo) = $record=~ /Defect/;
print STDOUT $foo;
Run Code Online (Sandbox Code Playgroud)

如果每个记录包含"缺陷",则打印出"1",如果包含其他内容则不打印.

或者:

$record =~ /Defect/;
print STDOUT $1;
Run Code Online (Sandbox Code Playgroud)

什么都不打印.

$record =~ s/Defect/Blefect/
Run Code Online (Sandbox Code Playgroud)

另一方面,将"Blefect"替换为"Blefect".

我真的很困惑为什么我的比赛的回报如此棘手.任何帮助将非常感激.

Sin*_*nür 17

您需要使用捕获括号来实际捕获:

if ($record =~ /(Defect)/ ) {
    print "$1\n";
}
Run Code Online (Sandbox Code Playgroud)


sid*_*yll 7

我认为你真正想要的是将正则表达式括在括号中:

my($foo) = $record=~ /(Defect)/;
Run Code Online (Sandbox Code Playgroud)

在列表上下文中,返回组,而不是匹配本身.而您的原始代码没有组.