我正在尝试创建一个理解数学方程(>, <, =, <=, >=, !=)
的正则表达式。这很简单。我想出了:
/(.*)([!<>][=]|[<>=])(.*)/
但是当我在PHP中使用此正则表达式时,使用preg_match
,如果等式为XYZ!=ABC
,则它只与=
匹配。它不应该与从左到右找到的第一个表达式匹配,当前是!=
吗?如果我的解决方案是错误的 - 这看起来如此 - 谁能告诉我为什么?
提前致谢。
答案 0 :(得分:4)
让(.*)
懒惰; (.*?)
,它会在可以继续之前匹配尽可能少的字符。
你现在拥有的是贪婪的,所以。*将匹配尽可能多的字符来完成表达式,与第一部分匹配的最长字符是XYZ!
,然后它需要匹配{{ 1}}在第二部分继续。
答案 1 :(得分:0)
*贪婪(。*)首先匹配XYZ!然后,通过([!] [=] | [&lt;&gt; =])的第二次交替匹配=,所以匹配成立。最左边的解决方案仅适用于整个表达式,这里要注意的规则是,贪婪的运算符首先服务于它。