我一直在努力解决以下问题:
经过研究,得出了以下结论:
(?=^([2-9]\d|[1-9]\d{2,})$)(?=^\d*[05]$)
(奇怪的是,在我使用的regex测试器中,表达式并不总是有效的)。
或
(?=^[2-9]\d+)(?=\d*[05]$)
我认为这个案子的范围仅限于20到99。
你能帮忙吗?
发布于 2015-11-11 10:14:59
试试这个:(\d{2}|[2-9])[05]
您的解决方案的问题是,您不检查您是否有一个2位或3位数字。
我的解决方案如下:
(<X>|<Y>)
-匹配X或Y(不是两者都匹配)\d{2}
-确切地说是2位数[2-9]
-在2-9的范围内正好有一个数字[05]
-a '0‘或'5’(乘5)作为一个整体,它表示“一个3位数字,或一个2位数字,其中第一位数是2-9,最后一位数是0或5”。
只要你没有前导零,它就能工作。在这种情况下,您需要一个前瞻性,这将是更复杂的。
发布于 2015-11-11 10:15:23
假设字符串只包含数字,并且不允许前导零:
^([2-9]|[1-9]\d)[05]$
构造正则表达式并不太困难,只需考虑范围:
[2-9][05]
。[1-9]\d[05]
。在这种情况下,这是相当容易的,因为每个10或100的倍数中的所有有效值都在此范围内。
一个更困难的例子是25到260之间的范围,其中包括两端的增量为5。我们需要将其分解为以下范围,以将问题简化为为10 s/100的倍数内的所有值编写正则表达式:
[3-9][05]
1\d[05]
2[0-5][05]
https://stackoverflow.com/questions/33648152
复制相似问题