BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- Regex: URL Filtern (http://www.black-board.net/thread.php?threadid=20755)


Geschrieben von phlox81 am 11.07.2005 um 13:47:

  Regex: URL Filtern

Moin,

Ich versuche gerade mittels regex eine URL zu filtern, leider
findet man im Internet nicht immer das richtige... Augen rollen

Mein Wissen um regex ist begrenzt...

Ich will den host und die Request aus einer URL ziehen:
http://www.mysite.de/<host
site.php?x=y&z=x < request.

Darum gehts also.
Das ist meine Regex:
(//[^/]+)/([\\d\\w\\.\\?\\=\\&]*)
Funktioniert auch grob, aber bei seiten wie:
www.mysite.de/haha/mysite.php?s=index
streikt er, da er dann nur haha als request einließt.
Meine eigentliche Frage ist also eigentlich, wie kann ich
nach dem / bei host es so machen, das er den ganzen angehängten string
als groupt nimmt ?

Devil



Geschrieben von phlox81 am 11.07.2005 um 14:13:

 

(//[^/]+)/([\\d\\w\\.\\?\\=\\&/]*)
^so läuft es nun einiger maßen, aber geht das nicht auch besser ?



Geschrieben von Black Star am 11.07.2005 um 16:29:

 

Ja, du kannst den ganzen rest einfach mit (.*) makieren.

Weil der Host vor dem ersten / steht macht ihn das ja schon eindeutig.
Beim Request ist es so, dass alles, was nach dem letzten / kommt der Request ist.
Ich weiss jetzt nicht wie gut PHP mit perl-regexps umgehen kann.

code:
1:
2:
3:
$ perl -e '$url="http://www.mysite.de/haha/mysite.php?s=index"; $url=~/(http:\/\/)?([^\/)]*)/; print "$2\n"; $url=~/(.*\/)(.*)/; print "$2\n";'
www.mysite.de
mysite.php?s=index


Das funktioniert bei mir und ist so allgemein wie moeglich gehalten, weil du sonst ja einen riesen Haufen Zeichen mit reinnehmen muesstest, die evtl. im Hostnamen oder im Request vorkommen koennten.



Geschrieben von phlox81 am 12.07.2005 um 07:28:

 

hm, werd mal schauen was java davon hält großes Grinsen



Geschrieben von phlox81 am 21.07.2005 um 12:28:

 

So, läuft alles wunderbar, tolle sache so ein WAP Crawler...

Nur dummerweise gibts da jetzt ein problem:
Auf einer der Testseiten sehen die links so aus :
<a class="myclass" href="..."> </a>

Meine RegEx sieht so aus:
"<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]"

wobei hier eigentlich nur dieser Teil von belang ist:
"<a\\s+href"

Wie kann ich nun es so anpassen, das er das class="..." dort
ebenfalls erkennt, und überspringt ?

Hm, hm, interessant, mein Crawler bekommt einen normalen wapquellcode,
während der browser html bekommt, interessant, also das Problem hat
sich damit vorerst eigentlich vielleicht erledigt ;)

Jemand ne Idee wies trotzdem gehen würde, falls ich darauf zurück kommen muss ? ;)

Devil



Geschrieben von LX am 21.07.2005 um 13:41:

Achtung

Zitat:
Original von Devil81
<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]
Wenn die Links wenigstens W3C-konform sind, dann gibt es zwischen den Attributen und deren Werten bzw. dem = keine Whitespaces und alle Werte sind in Quotes. Das würde die RegExp so aussehen lassen:

<a\\s+href=\"(.*)\"\\s+>

wenn du noch das class abfangen willst:

<a\\s+(class=\".*\"\\s+)?href=\"(.*)\"\\s+>

Die URL liegt dann aber wegen der Klammern ein Ergebnis später vor (und ich hoffe ich hab mich jetzt net vertan, ich mag keine RegExps *g).


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH