Perl正则表达式匹配至少但不超过

时间:2017-09-07 22:26:15

标签: regex perl

如果“a {m,n} =至少m但最多n a”,为什么代码返回true?

  my $seq= "xxxx";
  print "bingo!" if ($seq =~ /x{2,3}/);

由于我们的n = 3且字符串包含4 x? 我想我对/a{m,n}/关于n的定义感到麻烦。毕竟,关键在于确保我们在字符串中有最大3 x ...或者? 谁能解释一下?  我要求的逻辑是,当它不起作用时必须指定最大出现次数。意思是我想匹配最大值3,字符串有4;我得到TRUE,我认为最大值是3.实际上它是4。 感谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,Perl正则表达不固定(对于每个正则表达式实现都不是这样)。这意味着如果输入字符串的任何子字符串在您的情况下具有2或3个x,则匹配成功。

my $seq= "xxxx";
print "bingo!" if ($seq =~ /^x{2,3}$/);

将无法匹配(它将匹配的唯一字符串是“xx”和“xxx”。

可替换地:

my $seq= "xxxx";
print "bingo!" if ($seq =~ /([^x]|^)x{2,3}([^x]|$)/);

也会无法匹配,但会匹配任何有2或3个连续x的字符串,但如果这些x是较长的x字符串的一部分则不会。