» »

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
<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 8-)

OwcA ::

Iz dokumentacije:
(?=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 :8) ). Tako da ce mi lahko se tukaj pomagas ....

Aja, da se dodam ce je tole pravilno ...

Pattern p = Pattern.compile("(?i)(?<=<a(.)+href *=( |" + (char)(34) + "))([^" + (char)(34) + "']+)(?=" + (char)(34) + ")");

Zgodovina sprememb…

Ziga Dolhar ::

Pred časom mi je xbite dal tole ribiško palico ...

$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:
(?<= 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 ....?

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. ;)
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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
!

Vse, kar ste si želeli vprašati o CSS, pa si niste upali. (strani: 1 2 3 423 24 25 26 )

Oddelek: Izdelava spletišč
1298348601 (7738) sunniegoldie
»

Javascript DOM based XSS vulnerability

Oddelek: Programiranje
152894 (2316) MrStein
»

[Java] Regularni izraz

Oddelek: Programiranje
81140 (992) jan_g

python pomoč

Oddelek: Programiranje
393429 (2350) Mavrik
»

kako pobrat iz html kode podatke

Oddelek: Izdelava spletišč
131761 (1431) qshop

Več podobnih tem