Autor Zpráva
astek
Profil
Ahoj,
Pomocí preg_match třídím data, a potřeboval bych poradit s regulárním výrazem. Ten vypadá takto:
(body) ((div)?(#nadpis)?(.velit)?) (h1)
Problém je, že potřebuji, aby tam z této části:
((div)?(#nadpis)?(.velit)?)
Se vyskytoval alespoň 1 výraz, ale i klidně všechny 3.
Příklad:
body #nadpis h1 - správně
body div#nadpis.velit h1 - správně
body .velit h1 - správně
Problém je, že to propustí i:
body h1 - mezi body a h1 jsou 2 mezery, a tento výraz mi právě projde, což by neměl.
Děkuji za rady.
peta
Profil
Nebylo by jednodusi pouzit parsovani pres simple xml funkce?
Musis vypsat vsechno kombinace, ktere mohou nastat.
a = div
b = #nadpis
c = .velit
a|b|c
(a|b)c?
a?(b|c)
a?b?c
a(b?c?)
atd
Zjednodusene by slo mozna pouzit body( )?.*(a|b|c).* h1
Tori
Profil
Šlo by to asi takhle:
preg_match('~(body)\\s+(?:(\\s*div)?(\\s*#nadpis)?(\\s*\.velit)?)(?<=\\S)\\s*(h1)~iU', $cssSelektor, $m);
Mezi těmi částmi ("#nadpis", ".velit"..) můžou být mezery. Pokud chcete výslovně bez mezer, vyhoďte zvýrazněné části reguláru

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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