Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RegExp
Forum PHP.pl > Inne > Hydepark
nospor
Hejka, załóżmy iż mam tekst:
Cytat
PRZED<div class="aa"><div>ola<div>ss</div></div></div>ala</div>PO<div>DAAALEJ</div>

Z tego tekstu chce wyciągnąć całego diva wraz z zawartoscią, ktory ma klasę "aa", czyli cos takiego:
Cytat
<div class="aa"><div>ola<div>ss</div></div></div>ala</div>

Nie sugerujcie sie tekstem PRZED czy tez PO, gdyz to mogą byc dowolne znaki.
Kombinuje i kombinuje i nic nie moge wymyslic. Na razie mam cos takiego:
Kod
/<div class="aa">.*(<div>.*\1.*<\/div>).*<\/div>/g;

Ale niestety wyciaga mi to:
Cytat
<div class="aa"><div>ola<div>ss</div></div></div>ala</div>PO<div>DAAALEJ</div>

Pomóżcie

ps: wyrażenie te bede obsługiwal w js. tekst moze skladac sie z wielu takich divow o danej klasie i chce je wszystkie wyciągnąc
ps2: oczywiscie w tym divie moze juz nie byc innych divow, moze byc tylko sam tekst
devnul
powinno łapać chyba bez
Kod
ala</div>
bo ta ala znajduje sie po za zamknięciem diva o który Ci chodzi
nospor
sorki, pomylilem sie w stringu. powinien wygladac tak:
Cytat
PRZED<div class="aa"><div>ola<div>ss</div></div>ala</div>PO<div>DAAALEJ</div>


Problem nadal aktualny.
sf
Wg mnie się nie da. Bo na jakiej zasadzie wyrażenie regualne ma wiedzieć, który div jest końcowy? Musiałoby zliczać otwarte i zamknięte elementy, a o czymś takim nie słyszałem.
devnul
Kod
<div class="aa">.*?(<div>.*?(<div>.*?</div>.*?)?</div>).*?</div>


troche prowizorka - ale działa - przynajmniej z podanym przykładem tongue.gif
nospor
Cytat
przynajmniej z podanym przykładem
no wlasnie, to byl tylko przyklad. Dla takiego przykladu:
Cytat
PRZED<div class="aa"><div>ola<div>ss</div></div><div>przedala</div>ala</div>PO<div>DAAALEJ</div>
Juz nie zadziala sad.gif
empathon
Hmm wykorzystując regexy w ten sposób chyba się nie da... żeby był to kod uniwersalny.
Ja bym to proponował eval'ować na tablice tylko nie mam narazie pomysłu jak się uporać z dodatkowym info w postaci treści w pregach.
devnul
Kod
<div class="aa">.*?(<div>.*?(<div>.*?</div>.*?)*</div>.*?)*</div>
ale to już tak (z poprzednim tez dziala;) ) ;]

@empathon: jak xmla parsowac mozna - ale to wymaga stricte czystego kodu - bez zupy
nospor
Cytat
ale to już tak (z poprzednim tez dziala;) ) ;]
hehe, no tak, ale jak mowilem te divy moga sie zagniezdzac dowolnie gleboko, czyli np. tak:
Cytat
PRZED<div class="aa"><div>ola<div>ss <div>xxxx</div> </div></div><div>przedala</div>ala</div>PO<div>DAAALEJ</div>


Dlatego kombinowalem tak:
Cytat
<div class="aa">.*?(<div>.*?\1.*?<\/div>)*.*?<\/div>
z ta \1 myslac ze lyknie zagniezdzanie, ale cos nie lyka
devnul
nie łyka bo za \1 wstawia to co znalazł(by) w pierwszym wyrazie czyli zagłębien musialoby byc nieskonczenie wiele

a jest opcja żeby zrobić to troche inaczje? czy musi być jedno wyrażenie regularne?
nospor
Cytat
a jest opcja żeby zrobić to troche inaczje? czy musi być jedno wyrażenie regularne?
Moze byc inaczej, byleby mi tylko lyknelo wszystkie takie divy. Bo ja tu w przykladzie pokazalem tylko takiego jednego zamoteanego, ale ich moze byc wiecej smile.gif
siemakuba
A czy dopuszczalna jest droga na skróty? - jQuery

Kod
var e = $('div.aa').html();
console.debug(e);


pozdr.
nospor
@siemakuba no popatrz, rozwiązanie mialem przed oczami smile.gif Wszakze z jquery nie bede korzystal, ale fakt ze moge to na DOMObject zamienic bardzo mnie urządza biggrin.gif
dzieki za myśl
Cudi
Do takich rzeczy został stworzony XPath winksmiley.jpg

Kod
//div[@class='aa']

i pozamiatane winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.