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

Adi*_*iti 4 regex

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

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

Ala*_*ore 6

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

这就是其他响应者建议使用结束锚点 ( $) 的原因。如果你不能使用锚点,或者不想使用,你可以使用负前瞻:

/^%\*-{1,3}(?!-)/
Run Code Online (Sandbox Code Playgroud)