2009-07-13 9 views
0

ich möchte html Text ersetzen, die von TagHilfe mit preg_replace

start_ticker Code .... end_ticker

i Erfolg nicht

mein Code

$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html); 
geschlossen

Antwort

1

Standardmäßig "." stimmt nicht mit Zeilenvorschüben überein - Sie können den Modifikator "s" (DOTALL) hinzufügen, um dies zu ändern. Ich vermute, das ist dein Problem.

$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/is',"bla bla",$string_html); 
+0

/in ersetzen mir alles und ich bekomme leeren String –

+0

ich einen Tippfehler das erste Mal gemacht - sein sollte/ist – Greg

+0

Wenn Sie don Ich möchte die Kommentare nicht ersetzen, dann kombiniere das mit der Antwort von @soulmerge – Greg

1

Ich denke, Sie möchten die Start/End-Tags behalten. Dann müssen Sie sie mit Klammern erfassen:

$string_html = preg_replace('/(<!-- start_ticker -->).*(<!-- end_ticker -->)/i', '$1bla bla$2', $string_html); 

Beachten Sie jedoch, dass reguläre Ausdrücke sind nicht die beste Wahl, wenn es um HTML kommt.

+0

get leere Zeichenfolge –

+0

Das ist nicht möglich. Es sollte zumindest blabla enthalten – soulmerge

1

Sie benötigen:

$match1 = '<!-- start_ticker -->'; 
$match2 = '<!-- end_ticker -->'; 
$replace = 'bla bla'; 
$string = preg_replace("/$match1(.*?)$match2/is", $match1.$replace.$match2, $string); 

Beachten Sie, dass ein großer Unterschied macht, da sie das Spiel ungreedy macht (*.?). Dies ist, wenn das Muster auf die größte Anzahl von möglichen Permutationen dieses Musters abgestimmt wird, und nicht auf das kleinste.

http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy

Andernfalls würden Sie von der ersten bis zur letzten clobbering irgendetwas dazwischen passen, wenn es mehrere Übereinstimmungen.

2

können Sie dieses Problem lösen, auch ohne reguläre Ausdrücke zu verwenden:

$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

Ich empfehle dies. Es sollte schneller sein als die PCREs. – bucabay