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)
我认为你真正想要的是将正则表达式括在括号中:
my($foo) = $record=~ /(Defect)/;
Run Code Online (Sandbox Code Playgroud)
在列表上下文中,返回组,而不是匹配本身.而您的原始代码没有组.