[PHP] Reguläre ausdrücke

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hi, wollte mal fragen ob mir wer behilflich sein kann bei
dem Filtern eines Textes nach urls

Also ich möchte alle urls rausfiltern und nur noch diese haben dabei sollte es egal sein ob die url in einem <a href liegt oder einfach nur so.

Über den richtigen Reg. Ausdrück würd eich mich freuen.

mfg
 

aber nochmal ne kurze frage.

Jetzt findet er zwar 3 urls bei 2 möglichen. aber nur der 1 Treffer ist richtig.

Die anderen 3 sind mit einer 1 belegt.

Habe das ganze dann einfach durch einen Filter laufen lassen

PHP:
for($y=0;$y < COUNT($treffer);$y++) if(filter_var($treffer[$y],FILTER_VALIDATE_URL)) echo $treffer[$y];
dann gibt er auch nur die richtige URL aus, aber irgendwie nur 1 (sind 2 mal die selben urls an versch. Textstellen zu finden)

PHP:
preg_match("([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)",$text,$treffer);

Er müsste also 2 Urls ausgeben
 
Die sogenannten Delimiter fehlen, versuch mal:

PHP:
preg_match("~([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)~",$text,$treffer);

Wundert mich, dass er ohne Delimiter überhaupt was findet/keinen Fehler anzeigt.
 
Früher begannen URLs noch mit einem Protokoll :roll:

PS: preg_match_all ist besser geeignet wenn man alle Treffer haben will.
 
Früher begannen URLs noch mit einem Protokoll :roll:

Ja stimmt, aber er sagte ja auch, dass er URLs sucht die nicht in <a> Tags oder ähnliches stehen. Denke also, bei einem Gästebuch oder so wird er es einsetzen ;) Und das Protokoll wird häufig weggelassen.

PS: preg_match_all ist besser geeignet wenn man alle Treffer haben will.

Hatte ich nun nicht drauf geachtet, aber für resoucer's Zwecke könnte es gut sein.