Bonsoir,
Cette question au sujet de la gestion de chaines lorsque celles-ci sont imbriquées.
Dans un cas comme celui ci-dessous, la première des deux chaînes contient une unique expression, tandis que la deuxième contient deux expressions à attraper, puis transformer :
1 2
|
$contenuStr= array ("Le moteur de recherche <a href="http://google.fr" target="_blank">Google</a>, qui a donné le nom à la société Google","<a href="http://www.developpez.com/actu/73416/Windows-9-Microsoft-presente-officiellement-un-apercu-du-Menu-Demarrer/" target="_blank">developpez.com</a>, Copyright © 2000-2014 - <a href="http://www.developpez.com" target="_blank">www.developpez.com</a> et <a href="http://php.net/manual/en/function.preg-match.php" target="_blank">preg_match Perform a regular expression match</a>."); |
Pour attraper, puis transformer, la fonction suivante est utilisée :
1 2 3 4 5 6
|
function testPreg($contenuStr) {
$code = "`\<a href="http://('http://[a-z0-9._/-" target="_blank">+')\](.+)\</a>`i";
$traduction = '<a href=$1>$2</a>';
return preg_replace($code,$traduction,$contenuStr);
} |
Le traitement de la première chaîne se déroule bien, contrairement à la seconde, qui n'affiche pas le résultat escompté.
print'<p>'.testPreg($contenuStr[0]).'</p>'; print'<p>'.testPreg($contenuStr[1]).'</p>';
Affiche ceci :
1 2 3
| Le moteur de recherche Google, qui a donné le nom à la société Google
developpez.com[ /url ], Copyright © 2000-2014 - <a href="http://www.developpez.com" target="_blank">www.developpez.com</a> et [ url='http://php.net/manual/en/function.preg-match.php']preg_match Perform a regular expression match. |
Du coup, existe-t-il un moyen d'imbriquer deux ou plusieurs expressions au sein d'une même chaîne, sans passer par un compteur ?
D'avance, je vous remercie
Partager