Schrift
[thread]5946[/thread]

RegEx für Links: ...schon wieder eine Standardfrage :-)

Tags: Ähnliche Threads

Leser: 2


<< >> 8 Einträge, 1 Seite
cbxk1xg
 2003-12-03 19:13
#74266 #74266
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich habe mir ein mini CMS geschrieben, was auch ganz schön funktioniert. Die Daten werden in blanke Textdateien geschrieben und dann mit einem Template gemergt. Funktioniert so weit sehr schön.

Jetzt möchte ich Links automatisch erstellen können. Wenn also in der Textdatei: www.perl.de steht, dann soll eine RegEx daraus http://www.perl.de machen. Also einen "richtigen" Link. Leider schneidet meine RegEx immer alles nach dem Punkt ab und erkennt das Ende des Ausdrucks nicht. Was mache ich falsch?
Code: (dl )
$line =~ s-\www.(.*?)\.(.*?)-<a href="http://www.$1" target ="_blank">http://www.$1</a>-g
\n\n

<!--EDIT|cbxk1xg|1070471754-->
jan
 2003-12-03 19:15
#74267 #74267
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
CPAN:URI::Find könnte da helfen...
cbxk1xg
 2003-12-03 19:18
#74268 #74268
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
[quote=jan,03.12.2003, 18:15]CPAN:URI::Find könnte da helfen...[/quote]
Ich weiss, dass es dafür Module gibt. Ich würde es aber lieber mit einer RegEx machen. Das sollte ja auch irgendwie gehen? Nur wie?
Trotzdem danke.
ptk
 2003-12-03 19:28
#74269 #74269
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Guck doch einfach in die Dokumentation oder den Sourcecode des Moduls. Zufaellig gibt es in URI::Find eine Methode uri_re(), die deine gewuenschte regexp zurueckgibt. Einfach ausgeben lassen und verwenden.
Strat
 2003-12-03 19:32
#74270 #74270
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
schau dir mal auf meine HP unter Tips&Tricks -> URIs automatisch in Links umwandeln an, vielleicht reicht das
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
cbxk1xg
 2003-12-03 20:34
#74271 #74271
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
[quote=Strat,03.12.2003, 18:32]schau dir mal auf meine HP unter Tips&Tricks -> URIs automatisch in Links umwandeln an, vielleicht reicht das[/quote]
Das ist doch im Prinzip der gleiche Lösungsvorschlag?! Kann mir den niemand sagen, was an der RegEx falsch ist?
jan
 2003-12-03 22:04
#74272 #74272
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
du rufst nur $1 auf, nicht aber $2, welches du ebenso wie $1 aber belegen lässt. ersetztest du durch www.$1.$2, wäre zumindest für das szenario wohl kein problem da. dennoch empfehle ich, das anders zu lösen, denn was ist zum beispiel mit www.subdomain.domain.de?
Strat
 2003-12-04 00:37
#74273 #74273
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=cbxk1xg,03.12.2003, 18:13]
Code: (dl )
$line =~ s-\www.(.*?)\.(.*?)-<a href="http://www.$1" target ="_blank">http://www.$1</a>-g
[/quote]
.* sucht nach null oder mehr Zeichen, wobei durch das ? danach moeglichst wenig Zeichen gefunden werden (also Null).

\w steht fuer ein Wortzeichen (a-zA-Z0-9_); bei dir waere also auch 3ww gueltig.

www.: der Punkt steht fuer ein beliebiges zeichen, also auch wwwx
Du verwendest zwar $1, nicht jedoch $2

was passiert bei deinem Code, wenn da
http://xwwote.
hereinkommt?

Ein klein wenig koenntest du den Scanner folgendermaszen verbessern:
Code: (dl )
1
2
3
4
5
6
7
8
$line =~ s~
www # am anfang www: was passiert mit WWW ? oder board?
\.     # danach ein Punkt
(.+?) # danach ein oder mehrere Zeichen, aber moeglichst wenig
\. # danach ein Punkt
(.+?) # danach ein oder mehrere beliebige Zeichen, moeglichst wenig
\b # danach eine Wortgrenze
~<a href="[URL=http://www.$1.$2]http://www.$1.$2"[/URL] target="_blank">www.$1.$2</a>~xg;

Das mit der wortgrenze ist auch keine Idealloesung, weil da z.B. urls wie www.xyz.de/irgendwas nur www.xyz.de erkennen wuerde.\n\n

<!--EDIT|Strat|1070491132-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 8 Einträge, 1 Seite



View all threads created 2003-12-03 19:13.