最多匹配一个数字

时间:2016-04-18 13:40:51

标签: regex perl

我在Perl中有以下正则表达式,用于匹配其中包含6位或更少位数的字符串。但是,这也匹配超过6位的字符串。

$string =~ /[0-9]{1,6}/

匹配:

  1. T12345#1
  2. 0897
  3. 112355501234
  4. 我希望正则表达式匹配前2但不是最后一种情况。

3 个答案:

答案 0 :(得分:7)

使用否定的向前看以查看是否跟随数字,并且否定后面看起来因此您不仅仅匹配最后六位数字:

$string =~ /(?<!\d)\d{1,6}(?!\d)/

答案 1 :(得分:0)

或者你可以这样做:

$string =~ /^(?!.*\d{7}.*).*$/

答案 2 :(得分:0)

如果您只想拒绝包含六位以上十进制数字的字符串,那么您可以使用tr///来计算它们

if ( $string =~ tr/0-9// <= 6 ) { ... }

但是你不清楚是否应该统一单独的数字子串。您说T12345#1有效,但是T12345#12345呢?