我想要一个正则表达式,如果一个数字大于或等于一个任意数字,它就会匹配。对于这样一个简单的任务,这似乎非常复杂……看起来你需要在一个显式的为x手工创建的正则表达式中重新定义'counting‘。
例如,要直观地对大于25的数字执行此操作,我会得到
(\d{3,}|[3-9]\d|2[6-9]\d)如果这个数字是512345呢?有没有更简单的方法?
发布于 2011-12-24 04:02:33
似乎没有更简单的方法了。正则表达式不适用于数字。
你可以试试这个:
\[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](为清楚起见,换行符)
发布于 2011-12-24 04:02:40
如果这个数字是512345呢?有没有更简单的方法?
不,匹配某个范围内的数字的正则表达式看起来很糟糕(特别是大数字范围)。
正则表达式根本不适用于这样的任务。更好的解决方案是“自由地”匹配数字,比如\d+,然后将它们与语言的关系运算符(<、>等)进行比较。
发布于 2015-06-19 18:55:51
在Perl语言中,您可以使用条件regexp构造(?(condition)yes-pattern),其中(condition)为(?{CODE}),以运行任意Perl代码。如果您将yes-pattern设为(*FAIL),那么就会有一个只有在CODE返回false时才会成功的regexp片段。因此:
foreach (0 .. 50) {
if (/\A(\d+)(?(?{$1 <= 25})(*FAIL))\z/) {
say "$_ matches";
}
else {
say "$_ does not match";
}
}代码评估功能过去被标记为实验性的,但最新的“perlre”手册页面(http://perldoc.perl.org/perlre.html)现在似乎暗示它是一个核心语言功能。
从技术上讲,你所拥有的不再是一个“正则表达式”,而是一些正则表达式和外部代码的混合。
https://stackoverflow.com/questions/8620112
复制相似问题