正则表达式范围运算符

标签 regex perl

我有一个字符串“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/

相关文章:

jquery - 使用 Regex 和 JQuery 从页面获取链接号引用

Java正则表达式匹配模式并提取它们

perl - 使用 "for"对变量进行局部化显然是不好的。为什么?

perl - 如何调试Perl脚本?

java - 正则表达式匹配金额范围

c# - 验证 FQDN 的正则表达式

html - 在 HTML 中包装表格数据

perl - "my"是 Perl 中的函数吗?

arrays - Perl 从数组中输出连续的字符串

Javascript:将具有匹配项的函数传递给替换(regex,func(arg))不起作用