Autor Zpráva
temistokles
Profil
Dobrý deň,

potreboval by som napísať regulérny výraz, ktorý by v PHP našiel a následne odstránil tagy, ktoré sú prázdne. Tj. napríklad: <item></item>. Ďalej by som potreboval odstrániť komentáre, teda <!-- .......... -->.

Pomôže mi niekto s týmto regulérnym výrazom/mi? Lebo sám som sa ďaleko nedostal :(

Vopred diki.
Casero
Profil
temistokles
ereg("<.+><\/.+>)", $text)
ereg("<!--.+-->)", $text)
co takto jednoduše?.nestačí
deleted
Profil *
aha.. a ja som sa s tým toľko natrápil.. diki
deleted
Profil *
No tak sa zdá, že to toho povymazáva až priveľa :)
Pavel Strejček
Profil
Zkus to takhle:

$text = preg_replace('/<!--.*-->/Us', '', $text);

'U' omezí žravost a 's' aby to fungovalo i na přes více řádek.

Jinak pregy jsou rychlejší než eregy.
zivan
Profil
Tenhle regularni vyraz nebude fungovat.

Napr. z casti kodu "<div><br></div>" zbyde "<div>" bez ukoncovaciho tagu a to asi neni spravna funkce.

Pouzil bych subvyrazy, jen ted netusim, jak se v PHP zapisuji :-(
Pavel Strejček
Profil
zivan
Pokud to bude validní v XHTML "<div><br/></div>" tak na to bych ten výraz od Casera
upravil na

$text = preg_replace('/<[^\/]+><\/.+>/', '', $text);

případně pro ignorování mezer

$text = preg_replace('/<[^\/]+>\s*<\/.+>/', '', $text);

Ten můj výraz na komentáře je myslím v pohodě.
zivan
Profil
Tak uz jsem to nasel, melo by fungovat toto:

$text = preg_replace('/<([^\/]+)>\s*<\/\1>/', '', $text);

Odstrani pouze prazdny stejny tag. Neodstrani ani chybne zapsane "<a></b>". A nepotrebuje validni XHTML.
Pavel Strejček
Profil
zivan
Pro nekvalitní či zastaralý HTML kód to může být užitečné, ale jinak je to v této formě ztráta výkonu.
temistokles
Profil
validne xhtml, to ale nebude :) skor sa jedna o XML.. tie kodiky vyskusam
Pavel Strejček
Profil
temistokles
Tím lépe, XHTML je jenom podmnožina XML.

Možná se budou hodit tyhle funkce, dají se použít na stejnou věc jako ty reguláry:

http://www.php.net/domxml

Případně XML parser:

http://www.php.net/xml
temistokles
Profil
Takže nakoniec som použil tieto výrazy:

$data=preg_replace('/<([^\/]+)>\s*<\/\1>/', '', $data);
$data=preg_replace('/<!--.*-->/Us', '', $data);


Splo to funguje ako má, pekne Vám všetkým ďakujem.
Toto téma je uzamčeno. Odpověď nelze zaslat.