2009-08-09 13 views
2

Dies ist, was ich bisher:PHP preg_replace() auf mehrere Artikel

<?php 
$text = preg_replace('/((\*) (.*?)\n)+/', 'awesome_code_goes_here', $text); 
?> 

ich erfolgreich Klartextlisten im Format passend bin:

* list item 1 
* list item 2 

Ich möchte ersetzen sie es mit:

<ul> 
    <li>list item 1</li> 
    <li>list item 2</li> 
</ul> 

ich meinen Kopf nicht <ul> bekommen und Schleife durch <li> um Einwickeln s! Kann mir bitte jemand helfen?

EDIT: Lösung wie unten beantwortet ...

Mein Code lautet nun:

$text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text); 
$text = preg_replace('/<\/ul><ul>/', '', $text); 

Das tat es!

Antwort

3

Eine Option wäre, jedes Listenelement einfach durch <ul><li>list item X</li></ul> zu ersetzen und dann eine zweite ersetzen, die </ul><ul> durch nichts ersetzen würde.

+0

Das hat den Trick gemacht, danke! Aktualisierte Frage mit neuem Code –

0

Ich bin kein Experte mit Regex, aber was Sie tun wollen, ist das Muster übereinstimmen und erfassen Sie es in eine Rückreferenz durch Umgeben des gewünschten Musters mit() 's. Sie können dann von $ 1 (für den ersten Rückverweis usw.) stellen in Ihrem „awesome Codeabschnitt“

Regex buddy hat ein wirklich, wirklich genial Tutorial zu regulären Ausdrücken, wenn Sie mehr

+0

Ich habe $ 1 usw. für einzelne Übereinstimmungen arbeiten, aber ich hatte gehofft, die Ausgabe um alle Übereinstimmungen zu wickeln, dann fügen Sie die Ausgabe um jedes Spiel hinzu. Danke für den Link! –

0

benötigen Sie verwenden preg_match_all zu Ordne alle Elemente zu und schreibe sie dann in ul- und li-Tags um.

0

Ich denke, das ist, was Sie

<?php 

$text = <<<TEXT 
* item 
* item 
TEXT; 

$html = preg_replace("/^\\* (.*)$/m", "<li>\\1</li>", $text); 

echo '<ul>', $html, '</ul>'; 
+0

Danke! Aber die Liste ist in einer riesigen Zeichenfolge vergraben –

2

Ich möchte wissen, dass dies eine alte Post ist - aber es muss eine Lösung. Versuche dies! :)