2

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

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

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

提前致谢。

4

2 回答 2

4

使人(.*)懒惰;(.*?),它将匹配尽可能少的字符,然后才能继续。

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

于 2010-01-03T22:17:00.047 回答
0

* is greedy(.*) 首先匹配 XYZ!然后 = 与 ([!<>][=]|[<>=]) 的第二个交替匹配,因此匹配成立。最左边的解决方案仅适用于整个表达式,这里要注意的规则是,在涉及贪婪运算符的情况下,它的先到先得。

于 2010-01-03T22:21:23.503 回答