我遵循 Perl 脚本从日志中提取数字。?:
当我在变量中定义子模式时,似乎非捕获组不起作用。只有当我在 regex-pattern 或$number
.
#!/usr/bin/perl
use strict;
use warnings;
my $number = '(:?-?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[Ee][+-]?\d+)?)';
#my $number = '-?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[Ee][+-]?\d+)?';
open(FILE,"file.dat") or die "Exiting with: $!\n";
while (my $line = <FILE>) {
if ($line =~ m{x = ($number). y = ($number)}){
print "\$1= $1\n";
print "\$2= $2\n";
print "\$3= $3\n";
print "\$4= $4\n";
};
}
close(FILE);
此代码的输出如下所示:
$1= 12.15
$2= 12.15
$3= 3e-5
$4= 3e-5
对于以下输入:
asdf x = 12.15. y = 3e-5 yadda
那些翻倍的输出是不希望的。
这是因为样式与正则表达式m{}
的常规模式相反吗?m//
我只知道在我的正则表达式中获取变量(子字符串)的前一种风格。我只是注意到这一点用于反向引用,所以元字符可能还有其他差异吗?