PHP preg_replace () birden çok öğe üzerinde

5 Cevap php

Bu ben bugüne kadar ne var:

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

Ben başarıyla formatında düz metin listeleri uyan ediyorum:

* list item 1
* list item 2

Ben bunu değiştirmek istiyorum:

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

Ben sarma <ul> başımı almak ve <li> s döngü olamaz! Herkes yardım edebilir misiniz?

EDIT: Solution as answered below...

Benim kod şimdi okur:

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

Bunu yaptım!

5 Cevap

Bir seçenek sadece <ul><li>list item X</li></ul> ile her liste öğesini değiştirmek ve daha sonra çalıştırmak için olacağını, ikinci bir şey ile herhangi bir </ul><ul> olarak değiştirin hangi değiştirin.

Ben bu eski bir yazı olduğunu biliyorum - ama bu bir çözüm gerekiyor. Bu deneyin! :)

$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);

Regex ile 'bir uzman değilim, ama ne yapmak istediğiniz için gidiyoruz var desen maç ve ()' ler ile istenilen desen çevreleyen tarafından geribaşvuru içine çekmek olduğunu. Daha sonra "müthiş kod bölümünde" in (yani ilk geri referans için ve) 1 $ yerleştirebilirsiniz

Daha fazla ihtiyacınız varsa Regex buddy düzenli ifadeler gerçekten, gerçekten harika bir öğretici vardır

Sen preg_match_all tüm öğeleri maç ve ardından ul ve li etiketleri içinde onları yeniden yazmak için kullanabilirsiniz.

Ben bu istediğini olduğunu düşünüyorum

<?php

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

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

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