我在Perl中有以下正则表达式,用于匹配其中包含6位或更少位数的字符串。但是,这也匹配超过6位的字符串。
$string =~ /[0-9]{1,6}/
匹配:
我希望正则表达式匹配前2但不是最后一种情况。
答案 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
呢?