PHP中数学方程的正则表达式

时间:2010-01-03 22:12:32

标签: php regex preg-match

我正在尝试创建一个理解数学方程(>, <, =, <=, >=, !=)的正则表达式。这很简单。我想出了:

/(.*)([!<>][=]|[<>=])(.*)/

但是当我在PHP中使用此正则表达式时,使用preg_match,如果等式为XYZ!=ABC,则它只与=匹配。它不应该与从左到右找到的第一个表达式匹配,当前是!=吗?如果我的解决方案是错误的 - 这看起来如此 - 谁能告诉我为什么?

提前致谢。

2 个答案:

答案 0 :(得分:4)

(.*)懒惰; (.*?),它会在可以继续之前匹配尽可能少的字符。

你现在拥有的是贪婪的,所以。*将匹配尽可能多的字符来完成表达式,与第一部分匹配的最长字符是XYZ!,然后它需要匹配{{ 1}}在第二部分继续。

答案 1 :(得分:0)

*贪婪(。*)首先匹配XYZ!然后,通过([!] [=] | [&lt;&gt; =])的第二次交替匹配=,所以匹配成立。最左边的解决方案仅适用于整个表达式,这里要注意的规则是,贪婪的运算符首先服务于它。