Php preg_replace () em vários itens
-
12-09-2019 - |
Pergunta
É isso que tenho até agora:
<?php
$text = preg_replace('/((\*) (.*?)\n)+/', 'awesome_code_goes_here', $text);
?>
Estou correspondendo com sucesso listas de texto simples no formato de:
* list item 1
* list item 2
Eu gostaria de substituí -lo por:
<ul>
<li>list item 1</li>
<li>list item 2</li>
</ul>
Eu não consigo entender a cabeça <ul>
e percorrendo <li>
S! Alguém pode ajudar?
Editar: Solução conforme respondido abaixo ...
Meu código agora diz:
$text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text);
$text = preg_replace('/<\/ul><ul>/', '', $text);
Isso fez isso!
Solução
Uma opção seria simplesmente substituir cada item da lista por <ul><li>list item X</li></ul>
e depois execute uma segunda substituição que substituiria qualquer </ul><ul>
com nada.
Outras dicas
Eu sei que este é um post antigo - mas precisa de uma solução. Experimente isso! :)
$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);
Eu não sou especialista em Regex, mas o que você vai querer fazer é corresponder ao padrão que você tem e capturá -lo em uma referência de back -reference ao redor do padrão desejado com (). Você pode colocar $ 1 (para a primeira referência traseira e assim por diante) em sua "seção de código incrível"
REGEX Buddy tem um tutorial realmente, muito incrível sobre expressões regulares, se você precisar de mais
Você pode usar preg_match_all Para combinar todos os itens e reescrevê -los em tags UL e LI.
Eu acho que é isso que você quer
<?php
$text = <<<TEXT
* item
* item
TEXT;
$html = preg_replace( "/^\\* (.*)$/m", "<li>\\1</li>", $text );
echo '<ul>', $html, '</ul>';