我一直在尝试解决以下问题:
经过研究得出以下结论:
(?=^([2-9]\d|[1-9]\d{2,})$)(?=^\d*[05]$)
(奇怪的是,在我正在使用的正则表达式测试器中,表达式并不总是有效)。
或
(?=^[2-9]\d+)(?=\d*[05]$)
我认为这种情况下范围仅限于20到99.
请帮忙吗?
答案 0 :(得分:4)
假设字符串仅包含数字,并且不允许前导零:
^([2-9]|[1-9]\d)[05]$
构建正则表达式并不太难,只需考虑范围:
[2-9][05]
[1-9]\d[05]
在这种情况下相当容易,因为10或100的每个倍数中的所有有效值都在该范围内。
更难的情况的一个例子是25到260的范围,包括两端的增量为5.我们需要将其分解为以下范围,以减少为10s / 100s的倍数内的所有值写正则表达式的问题:
[3-9][05]
1\d[05]
2[0-5][05]
答案 1 :(得分:2)
试试这个:(\d{2}|[2-9])[05]
您的解决方案的问题是您不检查您是否有2位数或3位数字。
我的解决方案如下:
(<X>|<Y>)
- 匹配X或Y(不是两者)\d{2}
- 正好2位数[2-9]
- 正好在2-9 [05]
- “0”或“5”(乘以5)作为一个整体,它表示“一个3位数字,或一个2位数字,其中第一个数字是2-9,最后一个数字是0或5”。
只要您没有前导零,这应该可以正常工作。在这种情况下,你需要一个前瞻,它会更复杂。