Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
#1 · Zasláno: 1. 2. 2010, 17:24:05
Ř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 |
#2 · Zasláno: 1. 2. 2010, 18:03:40
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 |
#3 · Zasláno: 1. 2. 2010, 18:11:13 · Upravil/a: Majkl578
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 |
#4 · Zasláno: 3. 2. 2010, 08:40:08
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 |
#5 · Zasláno: 3. 2. 2010, 13:39:07
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.) |
||
Časová prodleva: 16 let
|
0