如何写一个匹配从0或000到180的数字范围的正则表达式?正则表达式:数字范围
回答
最简单的方法是将字符串解析为数字,然后查找该数字是否在适当的范围内。
要做到这一点用纯正则表达式,你需要确定的模式,它写出来:
^(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)$
刚刚交替用于每个棘手数值范围可能存在。
这样做的窍门正如你也提到它必须匹配3位数字001,010,012等等这样做谢谢 – Morten
试试这个:
^(0|[1-9][0-9]?|1[0-7][0-9]|180)$
对于三重000'都不是。 –
@Ionut G. Stan:我认为只有匹配没有前导零的数字太难了,这就是另一种选择。 – Gumbo
我修改浓汤的:
^(00?0?|0?[1-9][0-9]?|1[0-7][0-9]|180)$
尝试。
,如果你不关心负数
>> 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]
>>
有一个在线工具来生成这些at UtilityMill.com对于你的问题,这将返回:
0*([0-9]{1,2}|1[0-7][0-9]|180)
我会打破这样的范围它可以很容易地在单独的个人正则表达式中指定:
^(0|0[0-9][0-9]|1[0-7][0-9]|180)$
或者说,什么是人类可读的方面是相同的:
0 000-099 100-179 180
如果需要两位数的范围内,它只是一个加[0-9][0-9]
的正则表达式的问题。
此外,如果您在使用正则表达式时遇到问题,请尝试以使正则表达式运算符尽可能清晰的方式指定它们 - 通常有一种方法可以使它们的功能更加清晰,特别是如果您正在执行此操作的语言允许您将正则表达式规范的各个部分分离为单独的列和行。
您忘记了一位数字1到9. –
不,我只读“0或000到180”并解释为:0作为一位数字,或者三位数的范围为000至180。当我说“如果你需要两位数的范围......”我应该也提到了一个数字范围,所以对此你是正确的。 – lcv
我的两分钱:
任何人发布的回答这个问题应该已经测试了他们的正则表达式至少以下输入:
应符合:0,00,000,5,05, 005,95,095,180
不应该匹配:0000,0095,181,190
我认为约翰内斯罗塞尔写的是约一样好,你会得到:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
PowerShell有助于验证:'-20..200 |%{$ _;“{0:00}” - f $ _;“{0:000}” - f $ _} |%{if($ _-匹配“^(0?[0-9] {1,2} | 1 [0-7] [0-9] | 180)$”){Write-Host -fore green $ _} else {Write-Host - 前红色$ _}}' – Joey
最近发布rgxg
命令行工具产生符合特定数量范围的正则表达式:
$ rgxg range -Z 0 180
(180|1[0-7][0-9]|0?[0-9]{1,2})
有关详细信息,请参阅http://rgxg.sf.net。
您可以使用正则表达式如下
^([0-1]?[0-7]?[0-9])|180$
如果您需要它正好三位数字,您可以删除?迹象 –
- 1. 数字范围的正则表达式
- 2. 正则表达式的数字范围
- 3. 正则表达式数字范围
- 4. 正则表达式数字范围prasing
- 5. 爪哇正则表达式数范围
- 6. 正则表达式正则表达式 - 字符范围,字边界,断言
- 7. 正则表达式或OR两个范围正则表达式
- 8. 修改数字和数字范围表达式的正则表达式
- 9. 正则表达式匹配表达式货币数值范围
- 10. 字符串加数字范围的正则表达式
- 11. python:数字范围到正则表达式匹配字符串
- 12. 从数字到特定字符的正则表达式范围
- 13. 数字范围和字符的正则表达式
- 14. 正则表达式匹配范围或数字列表
- 15. 正则表达式范围的数字或只是一个数
- 16. 正则表达式的贪婪范围
- 17. perl正则表达式无效范围
- 18. Java的正则表达式范围
- 19. 正则表达式的具体范围
- 20. 正则表达式范围1-50
- 21. 正则表达式的年份范围
- 22. ASP.NET正则表达式编号范围
- 23. 正则表达式 - 可选范围
- 24. 正则表达式编号范围
- 25. 组正则表达式超出范围
- 26. VBA +正则表达式+范围。更换
- 27. 正则表达式 - 范围(2-16)?
- 28. Graphite storage-aggregation.conf正则表达式范围
- 29. 货币范围正则表达式
- 30. 正则表达式匹配IP范围?
http://www.regular-expressions.info/numericranges.html是一个非常有用的文章 – Bergi
我相信你可以使用这个包'的https:// github.com/dimka665 /范围-regex'。它已经支持负值。当前的代码没有更新,因此您必须从该github资源下载它。 – swdev