我有一个字符串“11 15”。使用正则表达式,我然后比较该字符串中的值,在本例中为 11 和 15(可以是任意数量的数字,但我会用 2 个 2 位数字保持简单)。
对于这些数字中的每一个,我然后查看它是否与我想要的任何数字相匹配;在这种情况下,我想查看数字是“12”、“13”还是“14”。如果是,那么我更改 '$m' 的值:
my $string = '11 15 ';
while ( $string =~ /([0-9]{1,})\s+/ig ) {
my $m = $1;
print $m . ".....";
$m = 'change value' if $m =~ /[12...14]{2,}/g;
print $m . "\n";
}
产生:
11.....change value
15.....15
'15' 应该保持不变。但是“11”改变了。我究竟做错了什么?
最佳答案
[12...14]
与“1”、“2”、“.”和“4”匹配。 “11”匹配; “15”没有。如果您只是匹配数字,则不应使用正则表达式。将您的行更改为以下内容:
$m = 'change value' if $m ~~ [11..14];
或者,如果无法保证 perl >= v5.10:
$m = 'change value' if grep { $m == $_ } 11..14;
关于正则表达式范围运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375689/