2010-01-03 4 views
2

J'essaie de créer une expression régulière qui comprend les équations mathématiques (>, <, =, <=, >=, !=). Ce qui est quelque chose de très simple. Je suis venu avec:Expression régulière pour les équations mathématiques en PHP

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

Mais quand j'utilise cette expression rationnelle en PHP, avec preg_match, si l'équation est XYZ!=ABC, il correspond juste avec =. Ne devrait-il pas correspondre à la première expression trouvée de gauche à droite, qui est actuellement !=? Si la solution de ma mine est fausse - ce qui me semble -, quelqu'un pourrait-il me dire pourquoi?

Merci d'avance.

Répondre

4

Rendez le (.*) paresseux; (.*?), il correspondra le moins de caractères possibles avant de pouvoir continuer. Ce que vous avez maintenant est gourmand, donc. * Correspondra autant de caractères que possible pour compléter l'expression, le plus long qui peut correspondre à la première partie est XYZ!, puis il doit correspondre à = dans la deuxième pièce continuer.

+0

Merci. Cette chose me faisait exploser l'esprit. –

0

* est gourmand (. *) Les premières correspondances XYZ! = correspond alors à la seconde alternance de ([! <>] [=] | [<> =]) de sorte que la correspondance est valide. La solution la plus à gauche s'applique uniquement à l'expression dans son ensemble, la règle à noter ici est celle où les opérateurs gourmands sont concernés par le premier arrivé premier servi.