正则表达式中的比较运算符

时间:2013-08-23 11:30:17

标签: php regex

我们可以在正则表达式模式中使用比较吗?我想检查最近匹配的群组是否为greater than个号码。这是模式:size=(\d+)我希望(\d+)>200然后返回true。

2 个答案:

答案 0 :(得分:5)

你不能用相同的语法来做,但你可以使用更复杂的表达式,例如:

大于200:

([1-9]\d+|(?!200)[2-9])\d\d

包括200:

([1-9]\d+|[2-9])\d\d

然而,当你接近其他(和更大的)数字时,它将是无法控制的。

您最好匹配所有数字,然后循环搜索结果以执行> 200检查,并删除不符合的数据。

注意:上述正则表达式只是为了表明在纯正则表达式中匹配数字大于200是可能的。但是不建议这样做,更复杂/可变的数字是不可行的。

OP在评论中提到他们希望与> 30*1024*1024匹配,> 31457280

为了证明为什么正则表达式是一种痛苦,我写了所需的模式:

\b((3[1-9][4-9][5-9][7-9][2-9][8-9]\d+)|(3[1-9][4-9][5-9][7-9][3-9]\d{2,})|(3[1-9][4-9][5-9][8-9]\d{3,})|(3[1-9][4-9][6-9]\d{4,})|(3[1-9][5-9]\d{5,})|(3[2-9]\d{6,})|(?!31457280)(4\d{7,}))\b

(不是很漂亮!)

答案 1 :(得分:0)

不,这是不可能的,正则表达式的目的是匹配表达式而不是用它来编程