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!

Foi útil?

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>';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top