正则表达式匹配至少n次但不超过m次

时间:2015-07-17 05:02:00

标签: regex

我想要一个可以匹配字符串%*---并且至少有一个连字符的正则表达式,但是如果有超过3个连字符,则表达式不应该匹配。![在此处输入图像描述] [1] 到目前为止,我已经提出/^%?\*{1}\s*(\- *){1,3}/但是当连字符超过3时它仍然匹配。

我也在?范围之后尝试了{1,3},但它不符合要求。

3 个答案:

答案 0 :(得分:3)

虽然它在教程和参考文献中经常被写为{min,max},但枚举量词并不意味着不超过max 。如果它看到三个连字符,-{1,3}将消耗所有三个连字符,但它并不关心下一个字符是什么(如果有的话)。就像这方面的所有其他量词一样:它尽可能多地消耗,然后将控制权交给正则表达式的下一部分。

这就是其他响应者建议使用结束锚($)的原因。如果您无法使用锚点,或者不想使用锚点,则可以使用否定前瞻:

/^%\*-{1,3}(?!-)/

答案 1 :(得分:0)

^(?!(.*?-){4})(?=.*?-).*$

您可以尝试这一点。预测将确保不超过3 -且至少1。请参阅演示。

https://regex101.com/r/fX3oF6/12

答案 2 :(得分:0)

最后你需要一个$,你的正则表达式可以大大简化:

/^%\*--?-?$/

请参阅demo