回答
没有单一的量词,意思是“正好m或n次”。你这样做的方式很好。
另一种方法是:
X{m}(X{k})?
其中m < n
和k
是n-m
值。
这里是量词的完整列表(参考http://www.regular-expressions.info/reference.html):
?
,??
- 0或1 OCCURENCES(??
是懒,?
是贪婪)*
,*?
- 任何数量的发生+
,+?
- 至少一次发生{n}
- 正是n
OCCURENCES{n,m}
-n
到m
OCCURENCES,包容{n,m}?
-n
到m
OCCURENCES,懒{n,}
,{n,}?
- 至少n
occurence
得到“确切的N或M“,你需要写量化的正则表达式两次,除非m,n是特殊的:
X{n,m}
如果m = n+1
(?:X{n}){1,2}
如果m = 2n
- ...
为什么在'm = 2n'示例中需要'?:'?似乎没有它为我工作正常。 – erb
@erb如果你忽略'?:',那么这个组就成为一个捕获组。除了正则表达式引擎,它不需要,如果你在这个之后捕获了组,它们的ID将会改变。如果您使用正则表达式进行替换,则必须调整替换。 –
TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
看起来你想要的“XN次”或“XM时代”,我认为直译以正则表达式将是(x{n}|x{m}).
像这样https://regex101.com/r/vH7yL5/1
,或者在一个情况下,你可以有更多的序列比m“x”s(假设m> n),你可以添加'following no'x''和'后跟no no x,翻译为[^x](x{n}|x{m})[^x]
,但是假设在你之后总有一个字符“ ד。正如你可以在这里看到的:https://regex101.com/r/bB2vH2/1
你可以把它改成(?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
,翻译成“跟随no'x'或跟随行开始'和'跟着不跟'x'或跟着行结束。但是,它仍然不匹配两个序列之间只有一个字符(因为第一个匹配需要一个字符之后,而第二个字符在之前),因为您可以在这里看到:https://regex101.com/r/oC5oJ4/1
最后,要匹配一个字符的距离匹配,您可以在“之后”的“否”x'后加上积极的眼神(?=),或者在之前的“否”x'之后加上积极的眼神(?< =),如下所示:https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
这样你只会匹配'你想要的x的确切数量。
- 1. Javascript,正则表达式和{n,m}
- 2. bash正则表达式不匹配“至少n次,但不超过m”
- 3. Javascript正则表达式对象无法识别{n,m}
- 4. 为什么这个正则表达式不起作用({m,n})?
- 5. n个字符或至少m个字符的正则表达式
- 6. 正确匹配模式的正则表达式量化符,而不是n次到m次
- 7. 正则表达式匹配M组
- 8. M/d/yyyy的正则表达式
- 9. 蟒正则表达式的子%H:%M:%S到%M:%S或01:%M:%S
- 10. 正则表达式匹配两个两个字(或n乘n)
- 11. 正则表达式剥离\ r和\ n或\ r \ n
- 12. 正则表达式 - 其次
- 13. 正则表达式日期格式m/dd/yy-m/dd/yy
- 14. 正则表达式“或”表达式
- 15. 正确测试整数或N/A正则表达式
- 16. 正则表达式或Python
- 17. 或正则表达式
- 18. 或正则表达式?
- 19. IfElse或正则表达式
- 20. 正则表达式或OR两个范围正则表达式
- 21. xml正则表达式/正则表达式或运算符
- 22. Sed - 从正则表达式到(正则表达式或eof)
- 23. 正则表达式/正则表达式“或”
- 24. 记事本++:在搜索一个正则表达式的表达式n次
- 25. 正则表达式\ p {L}和\ p {N}
- 26. N ++正则表达式 - 交换订单
- 27. 正则表达式中断\ n
- 28. 用正则表达式替换“\ N”
- 29. 正则表达式不包括“\ r \ n”
- 30. Python正则表达式扼流器\ n
编号两个'X'的出现是你可以得到的最好的'm','n'。 –