首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有简单的正则表达式将数字与x进行比较?

有没有简单的正则表达式将数字与x进行比较?
EN

Stack Overflow用户
提问于 2011-12-24 03:57:15
回答 4查看 9.7K关注 0票数 4

我想要一个正则表达式,如果一个数字大于或等于一个任意数字,它就会匹配。对于这样一个简单的任务,这似乎非常复杂……看起来你需要在一个显式的为x手工创建的正则表达式中重新定义'counting‘。

例如,要直观地对大于25的数字执行此操作,我会得到

代码语言:javascript
复制
(\d{3,}|[3-9]\d|2[6-9]\d)

如果这个数字是512345呢?有没有更简单的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-24 04:02:33

似乎没有更简单的方法了。正则表达式不适用于数字。

你可以试试这个:

代码语言:javascript
复制
\[1-9]d{6,}|
[6-9]\d{5}|
5[2-9]\d{4}|
51[3-9]\d{3}|
512[4-9]\d{2}|
5123[5-9]\d|
51234[6-9]

(为清楚起见,换行符)

票数 5
EN

Stack Overflow用户

发布于 2011-12-24 04:02:40

如果这个数字是512345呢?有没有更简单的方法?

不,匹配某个范围内的数字的正则表达式看起来很糟糕(特别是大数字范围)。

正则表达式根本不适用于这样的任务。更好的解决方案是“自由地”匹配数字,比如\d+,然后将它们与语言的关系运算符(<>等)进行比较。

票数 5
EN

Stack Overflow用户

发布于 2015-06-19 18:55:51

在Perl语言中,您可以使用条件regexp构造(?(condition)yes-pattern),其中(condition)(?{CODE}),以运行任意Perl代码。如果您将yes-pattern设为(*FAIL),那么就会有一个只有在CODE返回false时才会成功的regexp片段。因此:

代码语言:javascript
复制
foreach (0 .. 50) {
    if (/\A(\d+)(?(?{$1 <= 25})(*FAIL))\z/) {
        say "$_ matches";
    }
    else {
        say "$_ does not match";
    }
}

代码评估功能过去被标记为实验性的,但最新的“perlre”手册页面(http://perldoc.perl.org/perlre.html)现在似乎暗示它是一个核心语言功能。

从技术上讲,你所拥有的不再是一个“正则表达式”,而是一些正则表达式和外部代码的混合。

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

https://stackoverflow.com/questions/8620112

复制
相关文章

相似问题

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