je veux remplacer le texte html qui a fermé par tagaide preg_replace
start_ticker Code .... end_ticker
je ne suis pas le succès
mon code est
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
je veux remplacer le texte html qui a fermé par tagaide preg_replace
start_ticker Code .... end_ticker
je ne suis pas le succès
mon code est
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
Par défaut "." ne correspond pas aux nouvelles lignes - vous pouvez ajouter le modificateur "s" (DOTALL) pour changer cela. Je suppose que c'est votre problème.
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/is',"bla bla",$string_html);
Je suppose que vous voulez conserver les balises de début/fin. Ensuite, vous devez les capturer avec des supports:
$string_html = preg_replace('/(<!-- start_ticker -->).*(<!-- end_ticker -->)/i', '$1bla bla$2', $string_html);
Prenez garde cependant, que les expressions régulières ne sont pas le meilleur choix en matière de html.
Obtenir la chaîne vide –
Ce n'est pas possible. Il devrait au moins contenir blabla – soulmerge
Vous devez:
$match1 = '<!-- start_ticker -->';
$match2 = '<!-- end_ticker -->';
$replace = 'bla bla';
$string = preg_replace("/$match1(.*?)$match2/is", $match1.$replace.$match2, $string);
Notez que fait une grande différence, car il rend le ungreedy match (*.?). C'est à ce moment-là que le motif sera apparié au plus grand nombre de permutations possibles de ce motif, plutôt que le moins.
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy
Sinon, vous correspondre de la première à la dernière quoi que ce soit entre se démolir il y a plusieurs correspondances.
Vous pouvez résoudre ce problème, même sans utiliser des expressions régulières:
$start = '<!-- start_ticker -->';
$end = '<!-- end_ticker -->';
$replacement = 'blabla';
$posStart = stripos($str, $start);
if ($posStart !== false) {
$posEnd = stripos($str, $end, $posStart);
if ($posEnd !== false) {
$str = substr($str, 0, $posStart) . $replacement . substr($str, $posEnd + strlen($end));
}
}
Je recommande ceci. Cela devrait être plus rapide que les PCRE. – bucabay
/me remplacer tout et je reçois une chaîne vide –
j'ai fait une faute de frappe la première fois - aurait été/est – Greg
Si vous ne Je ne veux pas remplacer les commentaires, puis combiner cela avec la réponse de @ soulmerge – Greg