ugrás a tartalomhoz

Reguláris kifejezés tagadás

voidnull · 2009. Már. 11. (Sze), 12.41
LI -ek között lévő tartalmat szeretném megtalálni és kicserélni (preg_replace_callback-el) pl.

'/\<li\>(.*?)\<\/li\>/s'

de csak abban az esetben ha a listán belül nincs újabb lista (tehát nem tartalmaz <li> -t,

nem találtam olyan megoldást amivel azt tudom mondani, csak akkor cseréljen ha nem tartalmaz <li> -t
 
1

Negatív előretekintéssel

Török Gábor · 2009. Már. 11. (Sze), 13.27
$re = "/^<li\b[^>]*>((?>[^<]+)|<(?!li\b[^>]*>))*?<\/li>$/";
Forrás: Flagrant Badassery: Matching Innermost HTML Elements
2

Szerintem ez is jó

tisch.david · 2009. Már. 11. (Sze), 15.14
Szia voidnull!

Szerintem ez is jó:
(?<=<li>)(.(?!<li))*?(?=</li>)
Üdv:

Dávid
3

köszönet

voidnull · 2009. Már. 11. (Sze), 16.17
Köszönöm a gyors segítséget!

Végül is a Dávid által írt módszert kismértékben megfejelve sikerült számomra a legegyszerübb módon megoldani:


$this->cache = preg_replace_callback('/\{\@if((.(?!\{\@if))*?)\{if\@\}/s', array('tpl', 'parseIF_'), $this->cache);