如何编写与0或000到180的数字范围匹配的正则表达式?
答案 0 :(得分:34)
我不认为正则表达式是正确的选择。你试过解析这个值吗?如果你必须使用正则表达式,我会匹配\d{1,3}
解析字符串,然后验证代码中的数字。
答案 1 :(得分:29)
最简单的方法是将字符串解析为数字,并查找数字在适当的范围内。
要使用纯正则表达式执行此操作,您需要识别模式并将其写出:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
这有三种选择:一种用于单位和两位数字(允许前导零),其中每个数字可以是0到9之间的任何数字。另一个数字指定允许每个数字的数字范围。三位数。在这种情况下,这意味着第一个数字需要为1,第二个数字需要在0到7之间,最后一个数字可以是任何数字。第三种选择仅适用于数字180,而其他地方的模式并不合适。
更直接的方法可能是
^(0{0,2}[0-9]|0?[1-9][0-9]|1[0-7][0-9]|180)$
只是替换每个棘手的数字范围。
答案 2 :(得分:18)
有一个在线实用程序可以生成这些at UtilityMill.com对于您的问题,这将返回:
0*([0-9]{1,2}|1[0-7][0-9]|180)
答案 3 :(得分:14)
最近发布的rgxg
命令行工具生成与特定数字范围匹配的正则表达式:
$ rgxg range -Z 0 180
(180|1[0-7][0-9]|0?[0-9]{1,2})
有关详细信息,请参阅http://rgxg.sf.net。
答案 4 :(得分:3)
我的两分钱:
任何发布此问题答案的人都应该测试他们的正则表达式至少提供以下输入:
应匹配:0,00,000,5,05,005,95,095,180
不匹配:0000,0095,181,190
我认为JohannesRössel所写的内容与你所得到的一样好:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
答案 5 :(得分:2)
试试这个:
^(0|[1-9][0-9]?|1[0-7][0-9]|180)$
答案 6 :(得分:1)
我会分解范围,以便可以在单独的单个正则表达式中轻松指定:
^(0|0[0-9][0-9]|1[0-7][0-9]|180)$
或者,人类可读的术语是一样的:
0 000-099 100-179 180
如果您需要两位数的范围,只需将[0-9][0-9]
添加到正则表达式。
此外,如果您在使用正则表达式时遇到问题,请尝试以使正则表达式运算符尽可能清晰的方式指定它们 - 通常有一种方法可以使它们的函数更加清晰,特别是如果你这样做的语言允许你将正则表达式规范的各个部分分成不同的列和行..
答案 7 :(得分:0)
我修改了Gumbo's:
^(00?0?|0?[1-9][0-9]?|1[0-7][0-9]|180)$
试试。
答案 8 :(得分:0)
如果你不关心负数
>> r = /\b(0?\d?\d|1[0-7]\d|180)\b/
=> /\b(0?\d?\d|1[0-7]\d|180)\b/
>> (0..200).map {|i| i.to_s =~ r }
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
>>
答案 9 :(得分:0)
您可以使用以下正则表达式
^([0-1]?[0-7]?[0-9])|180$