正则表达式在输入中的任何位置预览n和m之间的字符类

时间:2013-01-11 14:02:12

标签: regex regex-lookarounds

前面的正则表达式是什么,断言输入中至少有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上)。

2 个答案:

答案 0 :(得分:4)

^从字符串的开头,匹配0个或更多个非数字,然后是数字{5 to 8 times},然后是非数字,直到字符串$的结尾:

^([^\d]*\d){5,8}[^\d]*$

答案 1 :(得分:0)

我终于找到了办法。您必须使用两个向前看 - 一个用于下限,一个用于上限:

^(?=(.*\d){5,8})(?!(.*\d){9,})[\w ]+$