Preg_match et autre

Eléphanteau du PHP | 13 Messages

16 oct. 2009, 21:51

Bonsoir,
Si je cherche un champ particulier, je peux le réaliser avec preg_match. Si je veux remplacer un morceaux de texte, je peux utliliser preg_replace. Par contre, si je veux récupérer un certain texte qui est situé à 10 caractères de ce que je cherche, que puis-je utiliser ?
Je sais que ça se fait, puisque il me semble l'avoir déjà pratiqué dans un projet, mais je ne le retrouve plus...

Eléphant du PHP | 185 Messages

16 oct. 2009, 21:58

Peut-être qu'en utilisant la fonction "substr" tu pourras couper les dix premiers caractères de ton texte et traiter la nouvelle chaîne... A vérifier.

Eléphanteau du PHP | 13 Messages

16 oct. 2009, 22:12

Alors là j'ai besoin d'un peu d'aide :D
J'ai peut-être trop passé de temps devant l'ordinateur aujourd'hui et je fatigue aussi... :oops:
Voilà en gros mon problème :
J'ai le texte suivant :
Bla bla bla" oh oh"... Réalisé par el toreador</a> bou boudjhf
Je cherche à récupérer ' el toreador' en sachant que ça aurait pu être le toro ou le moineau à 5 pattes et à 2 becs (donc des tailles bien différentes), mais en sachant que la balise derrière est toujours la même (</a>).
Voilà je crois que j'ai exposé mon problème.

Eléphant du PHP | 185 Messages

16 oct. 2009, 23:31

J'ai un peu de mal à comprendre ce que tu cherches exactement...

J'ai bien saisi que le nom que tu voulais extraire pouvait ne pas toujours avoir le même nombre de caractères (comme "Le Toro" - 7 caractères - et "El Toreador" - 11 caractères) , mais la chaîne qui précède fait-elle toujours 10 caractères, et celle qui succède contient-elle toujours la balise </a> ?

Si c'est le cas, la fonction substr ne suffira pas à elle seule. Pour commencer il faudra couper la chaîne à partir du dixième caractère, grâce à cette fonction :
$chaine = 'mon nom : El Toreador</a>, le seul, le vrai !';
$nouvelle_chaine = substr ($chaine, 10);
La variable $nouvelle_chaine contiendra donc désormais "El Toreador</a>, le seul, le vrai !". Les dix premiers caractères de la chaine (soit : "mon nom : ") auront été supprimés.

Ensuite il faudra spécifier que la balise </a> est le délimiteur (ou masque) de la nouvelle chaine et la remplacer, ainsi que tout ce qui la suis, par une chaine vide.
$masque = '#</a>.*#';
$replace = ''; // attention, il ne s'agit pas ici d'un guillemet, mais de deux apostrophes
$chaine_finale = preg_replace ($masque, $replace, $nouvelle_chaine);
Voilà, je ne garanti pas que ce soit la meilleure solution, ni même qu'elle fonctionne, mais c'est une piste à explorer. :)

Eléphanteau du PHP | 13 Messages

17 oct. 2009, 15:24

Tout d'abord, merci pour ton aide !
Ensuite, la chaîne avant "el toreador est variable en nombre de caractère, mais 'el toreador' sera toujours précédé de "réalisé par". Et oui, après 'el toreador', il y a la balise '</a>'.

Eléphant du PHP | 369 Messages

17 oct. 2009, 16:19

Salut,
Tout d'abord, merci pour ton aide !
Ensuite, la chaîne avant "el toreador est variable en nombre de caractère, mais 'el toreador' sera toujours précédé de "réalisé par". Et oui, après 'el toreador', il y a la balise '</a>'.
Rien de plus facile maintenant qu'on connait tes limitations:
<?php
  $pattern = "#r&eacute;alise par(.*?)<\/a>$#Uims";
  $str = "Un film r&eacute;alise par toto fuantes</a>";
  $iCountMatch = preg_match($pattern, $str, $match);

  print_r($match);
?>
Tu adaptes les options à ton besoin gères à ta façon les accents etc...

Voili voilou, @+ ;)

Eléphanteau du PHP | 13 Messages

17 oct. 2009, 17:25

Merci pour ton aide. J'y étais presque alors !