Forum » Programiranje » java in regex
java in regex
alesrosina ::
Hmja, imam en majhen problem in sicer bi rad z regexi iz nekega stringa (ubistvu html source koda) vn povlekel link (torej, to kar je zapisano v <a href="tole tukaj">). Do zdaj mi je uspelo da vn iz stringa povlecem <a href="nek link" potem se mi pa ustavi .... Ne znam namrec narest, da bi se znebil se taga a in argumenta href, torej da bi dobil samo url. In ne, nocem z replace (kaj ce je link napisan naprimer <a id="neki" name="haha" href="neki">). Skratka .... z regexi bi rad se znebil se tega. ali pa mogoce kaksna boljsa ideja? aja, se koda ....
Pattern p = Pattern.compile("(?i)<a(.)+href *= *( |" + (char)(34) + ")([^" + (char)(34) + "']+)" + (char)(34) + ""); Matcher m; m = p.matcher("nek string v katerem je HTML source koda"); if (m.find()) { System.out.println(m.group()); } else { System.out.println("Ni zadetkov"); }
OwcA ::
Uporabi lookahead in lookbehind.
P.S. lovi raje
P.S. lovi raje
<a (.)torej s presledkom.
Otroška radovednost - gonilo napredka.
alesrosina ::
Hm .... lookahead in lookbehind? kaj je to?
Pozabil sem povedat da sem popolni zacetnik v regexih - pred enim tednom se mi se sanjalo ni kaj je to ... zato bi prosil malcek daljso razlago, ce se ti ljubi. Sicer sem prebral neko e-knjigo o regexih, ampak mi se vedno zadeva ni cisto jasna (knjiga je bila pisana za regex v pearlu, kjer je malcek drugace kot v javi).
Hvala ze vnaprej
Pozabil sem povedat da sem popolni zacetnik v regexih - pred enim tednom se mi se sanjalo ni kaj je to ... zato bi prosil malcek daljso razlago, ce se ti ljubi. Sicer sem prebral neko e-knjigo o regexih, ampak mi se vedno zadeva ni cisto jasna (knjiga je bila pisana za regex v pearlu, kjer je malcek drugace kot v javi).
Hvala ze vnaprej
OwcA ::
Iz dokumentacije:
lookahead (behind) naredita točno to kar potrebuješ. Pogleda nadaljevanje (oziroma pred začetek) iskanega niza, a rezulta ne vrne.
Naprimer:
Bo ujel "ovca se pase" iz niza "Bela ovca se pase na zelenem pašniku", ne pa iz samo "bela ovca se pase" ali "Črna ovca se pase na požganem pasniku".
(?=X) X, via zero-width positive lookahead (?!X) X, via zero-width negative lookahead (?<=X) X, via zero-width positive lookbehind (?<!X) X, via zero-width negative lookbehind
lookahead (behind) naredita točno to kar potrebuješ. Pogleda nadaljevanje (oziroma pred začetek) iskanega niza, a rezulta ne vrne.
Naprimer:
(?<=Bela )ovca se pase(?= na zelenem pašniku)
Bo ujel "ovca se pase" iz niza "Bela ovca se pase na zelenem pašniku", ne pa iz samo "bela ovca se pase" ali "Črna ovca se pase na požganem pasniku".
Otroška radovednost - gonilo napredka.
alesrosina ::
Aha! To je to! Samo problem je ker mi zadeva ne dela - zaradi zacetnega < v html tagu. Kako bi pa to resil? Tista dokumentacija je zelo fina, jo na veliko uporabljam, ampak tole pri regexih mi pa ni niti slucajo ni jasno (kot da bi bral nekaj, kar je napisano v nemscini - ki jo znam zelooo slabo ). Tako da ce mi lahko se tukaj pomagas ....
Aja, da se dodam ce je tole pravilno ...
Aja, da se dodam ce je tole pravilno ...
Pattern p = Pattern.compile("(?i)(?<=<a(.)+href *=( |" + (char)(34) + "))([^" + (char)(34) + "']+)(?=" + (char)(34) + ")");
Zgodovina sprememb…
- spremenil: alesrosina ()
Ziga Dolhar ::
Pred časom mi je xbite dal tole ribiško palico ...
$this->ParseURL() pa potem nekaj naredi s tem stringom. Ampak verjetno te zanima tisti prvi argument, ne? :)
$buffer = preg_replace('/href="([^"]+)"/e', '$this->parseURL("\1")', $buffer);
$this->ParseURL() pa potem nekaj naredi s tem stringom. Ampak verjetno te zanima tisti prvi argument, ne? :)
https://dolhar.si/
alesrosina ::
hja, fora je ker argument href ni samo v tagu <a> .... jaz bi pa rad vn potegnil samo urlje iz <a href> taga ....
OwcA ::
Tole je povsem na blef in poenostavljneo:
Predpostavljam uporabo veljavnega HTML (samo element A ima atribut href, oziroma te zanimajo vrednosti vshe hrefov v nizu), dvojinh narekovajev in neuporabo presledkov.
(?<= href=\").+(?=\")
Predpostavljam uporabo veljavnega HTML (samo element A ima atribut href, oziroma te zanimajo vrednosti vshe hrefov v nizu), dvojinh narekovajev in neuporabo presledkov.
Otroška radovednost - gonilo napredka.
alesrosina ::
hm .... hja. href ima se <link> tag. ampak vseeno tole bi slo.
Samo potem se pojavi problem, ker bi rad zadevo priredil se za <img> tag ... torej da dobim vn vse urlje do slik (torej kar je v <img src="tukaj"> tagu. Namrec src argument ima pa kar nekaj tagov .... (img, script, iframe, itd). Torej ali je kaksna moznost, da se znebim pomena oziroma kaj v temu primeru sploh pomeni < znak (v tistem kar sem par postov zgoraj prilepil)?
Bi moral iti cez string 2x? Torej najprej da dobim ven url z tagom vred in potem se cez ta string, da dobim vn samo url? Verjetno bi se dalo brez 2kratnega ponavljanja regexa ....?
Samo potem se pojavi problem, ker bi rad zadevo priredil se za <img> tag ... torej da dobim vn vse urlje do slik (torej kar je v <img src="tukaj"> tagu. Namrec src argument ima pa kar nekaj tagov .... (img, script, iframe, itd). Torej ali je kaksna moznost, da se znebim pomena oziroma kaj v temu primeru sploh pomeni < znak (v tistem kar sem par postov zgoraj prilepil)?
Bi moral iti cez string 2x? Torej najprej da dobim ven url z tagom vred in potem se cez ta string, da dobim vn samo url? Verjetno bi se dalo brez 2kratnega ponavljanja regexa ....?
OwcA ::
Kakšne zelo očitne reštve tvoje težave ni, ker zahteva lookbehind fiksno dolžino iskanega niza.
Ena možnost je gotovo ta, da si najprej nabereš vse ustrezne tage in jih potem oskubiš, za ostale pa malo pomozgaj.
Ena možnost je gotovo ta, da si najprej nabereš vse ustrezne tage in jih potem oskubiš, za ostale pa malo pomozgaj.
Otroška radovednost - gonilo napredka.
alesrosina ::
hm. no sem potem resil z dvema regex stavkoma .... tko da upam da bo koncna zadeva delala :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
! | Vse, kar ste si želeli vprašati o CSS, pa si niste upali. (strani: 1 2 3 4 … 23 24 25 26 )Oddelek: Izdelava spletišč | 348601 (7738) | sunniegoldie |
» | Javascript DOM based XSS vulnerabilityOddelek: Programiranje | 2894 (2316) | MrStein |
» | [Java] Regularni izrazOddelek: Programiranje | 1140 (992) | jan_g |
⊘ | python pomočOddelek: Programiranje | 3429 (2350) | Mavrik |
» | kako pobrat iz html kode podatkeOddelek: Izdelava spletišč | 1761 (1431) | qshop |