Autor Zpráva
nethor
Profil
Řeší problém, jak nejlépe pomocí preg_replace()
převést vstup typu
[ul]
první řádek
druhý řádek
třetí řádek
atd....
[/ul]
na
<ul>
  <li>první řádek</li>
  <li>druhý řádek</li>
  <li>třetí řádek</li>
  <li>atd....</li>
</u>


nahrazení [ul] => <ul> je jasné
$pattern[]="/\[[uU][lL]\](.+?)\[\/[uU][lL]\]/s";
$replacement[]='<ul>\\1</ul>';


ale nevím jak obklopit každý řádek <li>...</li>
AM_
Profil
Možná bych povolal na pomoc callback.

function callback($matches){
  $rows = explode('\n', $matches[1]);
  $rows = implode('</li><li>', $rows);
  return '<ul><li>'.$rows.'</li></ul>';
}
$pattern[]="/\[ul\](.+?)\[\/ul\]/is";

Pozn. modifikátor "i" znamená case-insensitive, takže se vyvaruješ těch šíleností typu [uU][lL]
Majkl578
Profil
Buď callback nebo toto:
$input = '[ul]
první řádek
druhý řádek
třetí řádek
atd....
[/ul] ';

var_dump(preg_replace('~\[ul\](.*)\[/ul\]~isUe', "'<ul><li>'.implode('</li><li>',explode('\n',trim('\\1', '\n'))).'</li></ul>'", $input));
nethor
Profil
Díky za pomoc, funguje to bezvadně.
(
použil jsem
preg_replace('~\[ul\](.*)\[/ul\]~isUe', "'<ul><li>'.implode('</li><li>',explode('\n',trim('\\1'))).'</li></ul>'", $input));

)
Chamurappi
Profil
Reaguji na Majkla578:
Zajímavé, netušil jsem, že to jde i bez callbacku.
Jak bys to napsal, kdybys chtěl do výsledného kódu přidat postupně se navyšující čísla? (Ale tak, aby každý seznam začínal jedničkou.)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0