值范围从1到365
的RegEx是多少答案 0 :(得分:6)
您必须列出可能的组合1-9,10-99,100-299,300-359,360-365:
^([1-9]\d?|[12]\d\d|3[0-5]\d|36[0-5])$
答案 1 :(得分:5)
试试这个:
^(?:[1-9]\d?|[12]\d{2}|3[0-5]\d|36[0-5])$
^
和结束锚点
$
将匹配整个输入和
不仅仅是其中的一部分。(? )
用于分组。|
用于替换[1-9]\d?
将1
与99
[12]\d{2}
将100
与299
3[0-5]\d
将300
与359
360
与365
答案 2 :(得分:3)
不太适合正则表达式,但如果你坚持:
^(?:36[0-5]|3[0-5][0-9]|[12][0-9][0-9]|[1-9][0-9]|[1-9])$
这不允许前导零。如果你想允许这些,请告诉我。
上面的表达可以稍微缩短到
^(?:36[0-5]|3[0-5]\d|[12]\d{2}|[1-9]\d?)$
但我发现第一个解决方案更具可读性。 YMMV。
答案 3 :(得分:1)
匹配1到XYZ
之间数字的一般解决方案^(?!0)(?!\d{4}$)(?![X+1-9]\d{2}$)(?!X[Y+1-9]\d$)(?!XY[Z+1-9]$)\d+$
注意:
适用于您的案件:
^(?!0)(?!\d{4}$)(?![4-9]\d{2}$)(?!3[7-9]\d$)(?!36[6-9]$)\d+$
让我们解释一下:
(?!0\d*) - does not start with 0
(?!\d{4}$) - does not have 4 digits, i.e. between 1000 and infinity
(?![4-9]\d{2}$) - it's not between 400 and 999
(?!3[7-9]\d$) - it's not between 370 and 399
(?!36[6-9]$) - it's not between 366 and 369
答案 4 :(得分:0)
^3(6[0-5]|[0-5]\d)|[12]\d\d|[1-9]\d|[1-9]$
或者如果05
之类的数字无法输入:
^3(6[0-5]|[0-5]\d)|[12]?\d?\d$
P.S。:无论如何不需要正则表达式。使用ToInt(),< =,> =
答案 5 :(得分:0)
^36[0-5]|(3[0-5]|[12]?[0-9])[0-9]$
答案 6 :(得分:0)
这实际上取决于你的正则表达式引擎,因为它们可能并非都是PCRE风格的。除非我知道它将针对最小引擎,否则我通常会使用最低公分母。
为此,我只想使用:
^[1-9]|[1-9][0-9]|[1-2][0-9]{2}|3[0-5][0-9]|36[0-5]$
这将照顾(按顺序):
1-9
。10-99
。100-299
。300-359
。360-365
。但是,除非你完全要求只使用正则表达式,否则我不会。这就像试图用热核弹头杀死苍蝇一样。
只需使用更简单的^[0-9]{1,3}$
,然后使用您拥有的任何语言功能将其转换为整数并检查它是否介于1和365之间:
def isValidDayOtherThanLeapYear (s):
if not s.matches ("^[0-9]{1,3}$"):
return false
n = s.toInteger()
if n < 1 or n > 365:
return false
return true
你的代码会更具可读性,我倾向于重新考虑正则表达式的使用,他们开始看起来就像在轨道上六个月难以阅读一样。
答案 7 :(得分:-1)
这对我有用......
^ [1-3] [0-6] [0-5]?$