首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >regex匹配数大于或等于20,递增5,范围从20到999

regex匹配数大于或等于20,递增5,范围从20到999
EN

Stack Overflow用户
提问于 2015-11-11 10:00:32
回答 2查看 1.9K关注 0票数 2

我一直在努力解决以下问题:

  1. 匹配20到999范围内的所有号码
  2. 增加5次
  3. 无小数点
  4. 大于或等于20。

经过研究,得出了以下结论:

代码语言:javascript
运行
复制
(?=^([2-9]\d|[1-9]\d{2,})$)(?=^\d*[05]$) 

(奇怪的是,在我使用的regex测试器中,表达式并不总是有效的)。

代码语言:javascript
运行
复制
(?=^[2-9]\d+)(?=\d*[05]$)

我认为这个案子的范围仅限于20到99。

你能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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”。

只要你没有前导零,它就能工作。在这种情况下,您需要一个前瞻性,这将是更复杂的。

票数 2
EN

Stack Overflow用户

发布于 2015-11-11 10:15:23

假设字符串只包含数字,并且不允许前导零:

代码语言:javascript
运行
复制
^([2-9]|[1-9]\d)[05]$

构造正则表达式并不太困难,只需考虑范围:

  • 从20到99,增量为5,此范围的正则表达式为[2-9][05]
  • 从100到999,增量为5,此范围的正则表达式为[1-9]\d[05]

在这种情况下,这是相当容易的,因为每个10或100的倍数中的所有有效值都在此范围内。

一个更困难的例子是25到260之间的范围,其中包括两端的增量为5。我们需要将其分解为以下范围,以将问题简化为为10 s/100的倍数内的所有值编写正则表达式:

  • 价值25
  • 范围从30到99:[3-9][05]
  • 范围从100到199:1\d[05]
  • 范围从200到250:2[0-5][05]
  • 价值260
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33648152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档