正则表达式:匹配如果数字大于......?

时间:2011-01-09 16:12:57

标签: regex

我需要一个regexp来检查一个数值是否大于另一个值。 非常像我写的(if 10>8) ...

显然,我的代码片段不会让它发生,我缺乏regexp的经验来自行解决。这可能与正则表达式有关吗?

^[1-9]+[0-9]+$

谢谢!

4 个答案:

答案 0 :(得分:7)

对于正则表达式来说,这不是一个好问题。提取数字并用数字进行比较。

答案 1 :(得分:3)

如果我正确理解你的问题,你需要一个匹配两个连续数字的任意长度的正则表达式,其中第二个大于第一个。这与regexen无法做到。它显然不是常规语言,并且没有任何常见的扩展(反向引用,递归引用)足以改变它。

在一些正则表达式实现中(例如perl),可以将宿主语言中的代码嵌入到正则表达式中。在这种情况下,您当然可以将谓词num1 < num2嵌入为perl代码,但我不认为这可以作为正则表达式的解决方案。

答案 2 :(得分:1)

如果我理解正确,你可以在.htaccess或类似内容中比较这些数字。 有一种愚蠢且 unhealty 的方式来进行比较,并且需要评估字符串中的数字: “^ [0-9] [1-9] [0-9] $”匹配,如果你比较“5 12”,那么你可以理解5小于12。

只有100以下的数字才能比较相同长度的数字。

我认为如果你能更好地解释哪个是你的背景(iMacros,.htaccess ......),有人可以建议一个更好的方法来做到这一点。

答案 3 :(得分:0)

使用正则表达式并不是直截了当的。您编程的语言可能允许扩展regexp语法以插入任意代码。例如在Perl中:

$_ = '54 55';
say 'matched' if /\A(\d\d) (\d\d)(?(?{$1 >= $2})(*FAIL))\z/;

这成功但56 55没有。在https://stackoverflow.com/a/30936388/626804中,我进一步解释了一下。

这是好品味还是好主意是另一回事 - 但在Perl中你可以将这种比较塞进一个所谓的正常表达式中。如果你真的想要匹配。