在试图对this问题做出回应时,我遇到了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
为什么这两个脚本产生不同的结果?
是的,这是非常接近我会怎么做。然而,你可以把我放入if语句中:'if(my @array = ...){@array valid valid here} but not here' – Tanktalus 2012-08-15 15:09:28
@Tanktalus - 确实,你可以,而且这很好。 +1 – Kenosis 2012-08-15 16:05:01