2

数式を理解する正規表現を作成しようとしています(>, <, =, <=, >=, !=)。これは非常に単純なことです。私は思いついた:

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

しかし、この正規表現を PHP で使用するとpreg_match、式がXYZ!=ABCの場合、 と一致するだけ=です。左から右に見つかった最初の式と一致するべきではありません!=か? 私の解決策が間違っている場合-そう思われる-、誰かが理由を教えてもらえますか?

前もって感謝します。

4

2 に答える 2

4

怠惰にし(.*)ます。(.*?)、続行する前に可能な限り少ない文字に一致します。

あなたが今持っているものは貪欲であるため、 .* は式を完成させるためにできるだけ多くの文字に一致します.最初の部分に一致できる最長のものは ですXYZ!.次に、続行するには2番目の部分に一致する必要があります=.

于 2010-01-03T22:17:00.047 に答える
0

* is greedy(.*) 最初に一致する XYZ! = は ([!<>][=]|[<>=]) の 2 番目の代替と一致するため、一致が保持されます。一番左の解決策は、式全体にのみ適用されます。ここで注意すべき規則は、貪欲な演算子が関係する場合、先着順に処理されるということです。

于 2010-01-03T22:21:23.503 に答える