在尝试回答这个问题时,我遇到了 Perl 的正则表达式引擎的一些奇怪行为。我有一个字符串,其中包含我试图与正则表达式匹配的 2 个数量。正则表达式只匹配字符串“units/ml”之前的任意 8 个字符。我想抓住两个单位。
此脚本仅打印匹配的第二个:
use warnings;
use strict;
my $line = 'some data 100,000 units/ml data 20,000 units/ml data';
my @array;
if ($line =~ m/.{8}units\/ml/g) {
@array = $line =~ m/.{8}units\/ml/g;
print join(' ', @array) . "\n";
}
它的输出:
20,000 units/ml
如果我运行第 6 行两次,则分配给 @array 的行:
use warnings;
use strict;
my $line = 'some data 100,000 units/ml data 20,000 units/ml data';
my @array;
if ($line =~ m/.{8}units\/ml/g) {
@array = $line =~ m/.{8}units\/ml/g;
# Let's run that again, for good measure...
@array = $line =~ m/.{8}units\/ml/g;
print join(' ', @array) . "\n";
}
它的输出:
100,000 units/ml 20,000 units/ml
为什么这两个脚本会产生不同的结果?