2009-07-13 7 views
0

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); 

Répondre

1

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); 
+0

/me remplacer tout et je reçois une chaîne vide –

+0

j'ai fait une faute de frappe la première fois - aurait été/est – Greg

+0

Si vous ne Je ne veux pas remplacer les commentaires, puis combiner cela avec la réponse de @ soulmerge – Greg

1

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.

+0

Obtenir la chaîne vide –

+0

Ce n'est pas possible. Il devrait au moins contenir blabla – soulmerge

1

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.

2

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)); 
    } 
} 
+0

Je recommande ceci. Cela devrait être plus rapide que les PCRE. – bucabay