2017-06-07 2 views
-1

Ich möchte alle Übereinstimmungen mit preg_replace ersetzen, aber es funktioniert nur einmal.PHP preg_replace alle Übereinstimmungen

Hier Funktion i verwendet:

function bbc2html($text) { 
    $find = array(
     '~\[spoiler\](.*?)\[/spoiler\]~s' 
    ); 
    $replace = array(
     '<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>$1' 
    ); 
    return preg_replace($find,$replace,$text); 
} 

Eingang:

echo bbc2html('[spoiler]Its a spoiler[/spoiler]'); 
echo bbc2html('[spoiler][spoiler]Its a multiple spoiler[/spoiler][/spoiler]'); 

Ausgang:

<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>Its a spoiler 
<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>[spoiler]Its a multiple spoiler[/spoiler] 
+0

es in einer while-Schleife zu werfen oder sehen https://stackoverflow.com/questions/18445296/preg-replace-all-occurrences-in-string-withing-defined -delimeter – clearshot66

+0

@ chris85 im tut mir leid, dass ich das vergessen habe, ich habe jetzt –

+0

hinzugefügt Okay, also hast du geschichtete Tags. Sie sollten einen BBCode-Parser verwenden, keine Regex. – chris85

Antwort

0
function bbc2html($text) { 
$find = array(
    '~(\[spoiler\])+(.*?)(\[/spoiler\])+~s' 
); 
$replace = array(
    '<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>$2' 
); 
return preg_replace($find,$replace,$text); 
} 

Kann es funktioniert?

+0

Es konnte nicht helfen, aber ich fand die Lösung. Ich benutze diese Klasse: https://github.com/samclarke/SBBCodeParser –

+0

hast du '$ 1' zu' $ 2' ersetzt? Ich habe versucht und gearbeitet – Nine

+0

Ich tat, aber es nicht helfen, ich benutze Funktion, die Sie geschrieben und 'text' ist' echo bbc2html2 ('[Spoiler] asdas [Spoiler] Es ist ein mehrere Spoiler [/ Spoiler] [/ Spoiler] '); ' –

0

Dies ist eine weitere Funktion:

function bbc2html($text) { 
$find = array(
    '~(\[spoiler\]\w*)+(.*?)(\[/spoiler\])+~s' 
); 
$replace = array(
    '<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>$2' 
); 
return preg_replace($find,$replace,$text); 
}