Se connecter avec
S'enregistrer | Connectez-vous

[PHP] regexs

Dernière réponse : dans Programmation

Bonjour tout le monde, :hello: 

j'ai besoin d'utiliser des regexs mais je n'y arrive pas.
ma chaine :
  1. <b>Prix: </b></td><td class=cell>2 200 €</td>

Je veux récupérer la valeure '2 200' dans cet exemple.


voici mon code:
  1. $prix = preg_match('#<b>Prix\: </b></td><td class=cell>(.+) €</td>#', $source, $prix);
  2. echo '<br />Prix : '.$prix.'<br />';

J'obtient :
Citation :
prix : 0

quelqu'un peut t'il me dire d'ou viens l'erreur ?

Autres pages sur : php regexs

Lassé par la pub ? Créez un compte

oui je pense que c'est bon, mais je n'arrive pas a mettre ma regex en place :
quesque je dois modifier :
  1. $prix = preg_match('#<td[^>]+>(.+)€#', $source, $prix);
  2. echo '<br />Prix : '.$prix.'<br />';

J'obtient toujours prix : 0 , d'ou vient le problème!?
Expert Programmation

Mais si! personne ne lit la doc?
preg_match($pattern, $subject, $matches) renvoit true or false mais remplit le tableau $matches avec les concordances.
Citation :
int preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]] )

preg_match() analyse subject pour trouver l'expression qui correspond à pattern.

Si matches est fourni, il sera rempli par les résultats de la recherche. $matches[0] contiendra le texte qui satisfait le masque complet, $matches[1] contiendra le texte qui satisfait la première parenthèse capturante, etc.

Citation :
int preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]] )

preg_match() analyse subject pour trouver l'expression qui correspond à pattern.

Si matches est fourni, il sera rempli par les résultats de la recherche. $matches[0] contiendra le texte qui satisfait le masque complet, $matches[1] contiendra le texte qui satisfait la première parenthèse capturante, etc.

donc dans mon code :
  1. $prix = preg_match('#<td[^>]+>(.+)€#', $source, $prix);
  2. echo '<br />Prix : '.$prix[1].'<br />';

Mais sa marche pas..

EDIT, je vien de trouver,
il fallait enlever le $prix = devant le preg_match
Donc j'obtient bien l'information mais sa ne marche pas sur certaines pages..
Expert Programmation

2Dpix a dit :
Donc j'obtient bien l'information mais sa ne marche pas sur certaines pages..


Peut-être que ton pattern n'est pas valable pour toutes les pages.
D'on l'interet de faire:
  1. if (preg_match($pattern,$source,$prix)) {
  2. echo "le prix est ".$prix[1];
  3. } else {
  4. echo "Je ne trouve pas dans:<pre>".$source."</pre>";
  5. }

Lassé par la pub ? Créez un compte
Tom's guide dans le monde