我需要一个regexp来检查一个数值是否大于另一个值。
非常像我写的(if 10>8)
...
显然,我的代码片段不会让它发生,我缺乏regexp的经验来自行解决。这可能与正则表达式有关吗?
^[1-9]+[0-9]+$
谢谢!
答案 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中你可以将这种比较塞进一个所谓的正常表达式中。如果你真的想要匹配。