首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不允许1,000个接受值大于25000和十进制的倍数的正则表达式

不允许1,000个接受值大于25000和十进制的倍数的正则表达式
EN

Stack Overflow用户
提问于 2016-01-22 17:40:33
回答 4查看 1.8K关注 0票数 5

我有两个组合:

  1. 用于检查1000的倍数,即^[1-9]+[0-9]*000$
  2. 用于检查大于25000的值,即^\\d{6,}$|^[3-9]\\d{4}$|^2[5-9]\\d{3}$

当我试图将两个正则表达式和正的查找操作符组合起来时,

^(?=[1-9]+[0-9]*000)(?=\\d{6,}$|^[3-9]\\d{4}$|^2[5-9]\\d{3})*$

它的取值为25000100,35000100,它不是1000的倍数。

是否有可能通过一个正则表达式实现这两种场景?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-22 17:53:05

这应该能行

代码语言:javascript
运行
复制
^([1-9]\d{2,}|[3-9]\d|2[5-9])000$

https://regex101.com/r/vJ8xU6/3

票数 2
EN

Stack Overflow用户

发布于 2016-01-22 17:44:40

代码语言:javascript
运行
复制
^(2[5-9]\d*|[3-9]\d+|[12]\d{2,})000$

看到它的行动

这样做的目的是:

  • 2[5-9]\d* - 25-29和可选数字之后是>= 25。
  • [3-9]\d+ - 3-9后面有一个或多个数字,为> 25。
  • [12]\d{2,} -1或2,在此之后有两个或更多位数是> 25。
  • 000 -在末尾添加3个0作为1000个可分性
票数 2
EN

Stack Overflow用户

发布于 2016-01-22 17:59:02

显然,任何以1000结尾的字符串都是1000的倍数,因此给定一个字符串X000,我们只需考虑X。

  • 如果X是>=3位数(与[1-9]\d\d\d*匹配),则X000 >= 100000 > 25000
  • 如果X是2位数,X的第一个数字是>2(匹配[3-9]\d),那么X000 >= 30000 > 25000
  • 如果X是2位数,X的第一位数是2,X的第二位数是>= 5(匹配2[5-9]),那么X000 >= 25000 = 25000。

任何其他可能的X都会导致一个较小的数目(或一些不是数字的东西),所以将它们放在一个组([1-9]\d\d\d*|[3-9]\d|2[5-9])中作为前缀。

([1-9]\d\d\d*|[3-9]\d|2[5-9])000

另见:https://regex101.com/r/bV1kN3/1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34952840

复制
相关文章

相似问题

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