前面的正则表达式是什么,断言输入中至少有n个但不超过m个字符类。
举一个简单的具体例子,假设我想断言输入中某处有 5-8位,输入由字符和空格组成(即[ \w]*
)。然后:
this line 123 does not match
this line 123 foo 456 matches
this line 123 % 456 does not match
this line 123 foo 456 bar 789 does not match
我已经尝试了{5,8}
的各种组合:
^(?=(.*\d){5,8})[ \w]*$
但8
的上限未应用于匹配的第4行(例如regexpal上)。
答案 0 :(得分:4)
^
从字符串的开头,匹配0个或更多个非数字,然后是数字{5 to 8 times}
,然后是非数字,直到字符串$
的结尾:
^([^\d]*\d){5,8}[^\d]*$
答案 1 :(得分:0)
我终于找到了办法。您必须使用两个向前看 - 一个用于下限,一个用于上限:
^(?=(.*\d){5,8})(?!(.*\d){9,})[\w ]+$