bonjour,
Ton équation sort d'où ? c'est l'utilisateur qui l'indique dans un champ de formulaire ?
Si c'est le cas et à partir du moment où ton équation est factorisée de la sorte, ça n'a pas l'air bien compliqué. Ton équation est vraie si l'une des deux partie de ton équation est égale à 0. Au lieu de prendre l'exemple que tu as donné, je vais schématiser un peu.
On cherche x qui permet de de résoudre une de ces 4 équations
(x+a)(x+b) =0
(x-a)(x+b) =0
(x+a)(x-b) =0
(x-a)(x-b) =0
soit pour faire court
x = -a
x = -b
Après c'est juste une question d'extraire a, b et le l'opérateur (+ ou -) de ta chaine de caractère.
Une petite expression régulière et c'est fait
<?php
$sEquation = "(x-1)(x+2)";
$sPattern = "(x([\+|-][0-9]+)*)";
preg_match_all( "/".$sPattern."/", $sEquation, $aValeur );
echo "<pre>";
var_dump($aValeur);
echo "<pre>";
?>
et là tu n'as plus qu'à exploiter les données en affichant le signe opposé des valeurs retournées.
Il faut s'assurer que la chaine de caractères est bien de la forme (x+a)(x+b) et non pas par exemple ( x +a) (x -b)
Je te laisse chercher pour la suite
http://fr.php.net/manual/fr/function.preg-match-all.php
Un tuto très bien mais en anglais sur les expressions régulières : http://www.phpbuilder.com/columns/dario19990616.php3