[solved] Regex URL Erkennen

Fragen rund um PHP,HTML,CSS und MySQL

[solved] Regex URL Erkennen

Beitragvon Markus.Lorch » 24. Mär 2011, 18:28

Hi,

schon wieder RegEx :) Ich hab einen fertigen RegEx gefunden weiß aber nicht wie ich den in Verbindung mit preg_replace verwenden kann.

Code: Alles auswählen
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$


Das soll ein laut Quelle ein sehr guter Regex sein, der so gut wie alles berücksichtigt. Ich will mit nem Outputfilter URLs im Text gleich durch nen HTML Link damit ersetzen. in der Hoffnung, dass es damit klappt. Aber ich weiß nicht wie ich den jetzt anwenden kann. Also wie ich daraus nen Link "extrahiere"
Zuletzt geändert von Markus.Lorch am 29. Mär 2011, 22:06, insgesamt 1-mal geändert.
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle
Benutzeravatar
Markus.Lorch
 
Beiträge: 635
Registriert: 21. Okt 2007, 16:22
Wohnort: Walheim

Re: Regex URL Erkennen

Beitragvon jeandeluxe » 24. Mär 2011, 19:42

Markus.Lorch hat geschrieben:Das soll ein laut Quelle ein sehr guter Regex sein..


Das ist in erster Linie ein Monster.. ;-) glaub nicht wirklich das du das brauchst. Zum Regex testen (hat auch diverse Beispiel regex dort) find ich http://gskinner.com/RegExr/ ziemlich gut. Da kannste dann auch direkt deine replaces ausprobieren.. (falls du am Mac sitzt: RegExhibit ist auch nett.. und hat noch ne bessere Hervorhebung der matches)

Markus.Lorch hat geschrieben:Ich will mit nem Outputfilter URLs im Text gleich durch nen HTML Link damit ersetzen.


Beim OPF sollte man son bischen auch die Performance im Hinterkopf behalten.. und das Monster von oben kann ich mir vorstellen "frißt" ganz gut. ;-) Hier ein simples Beispiel.. die regex ist nicht sonderlich sophisticated, kann man sicher besser machen, aber vor allem wird dir daraus denk ich klar wies im Prinzip geht:

Code: Alles auswählen
$content = preg_replace(
  "#(^|[^\"=]{1})(http://|ftp://|mailto:|https://)([^\s<>]+)([\s\n<>]|$)#sm",
  "\\1<a href=\"\\2\\3\">\\3</a>\\4",
  $content
);


hth,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 26. Mär 2011, 09:25

Hej,

die Regex müsstest du noch vervollständigen. Die findet auch Urls innerhalb von HTML.

Einen direktes preg_replace würde ich daher nicht machen sondern erst einmal alles matchen (preg_match_all) und danach die Ergbnisse noch einmal genauer überprüfen.

Wann und wie werden die Urls eingegeben?
Eventuell gar nicht den Outputfilter verwenden.

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon jeandeluxe » 26. Mär 2011, 10:35

Thomas.Blum hat geschrieben:Die findet auch Urls innerhalb von HTML.


Kann sein.. ist lediglich ne quick&dirty Lösung für plaintext files. ;)

lg,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 26. Mär 2011, 11:06

jeandeluxe hat geschrieben:
Thomas.Blum hat geschrieben:Die findet auch Urls innerhalb von HTML.

Kann sein.. ist lediglich ne quick&dirty Lösung für plaintext files. ;)


Beide Lösungen müssten angepasst werden.

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon jeandeluxe » 26. Mär 2011, 12:09

Thomas.Blum hat geschrieben:Beide Lösungen müssten angepasst werden.


mach.. ;-)

lg,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 26. Mär 2011, 12:57

jeandeluxe hat geschrieben:mach.. ;-)


Ohne preg_match_all

Code: Alles auswählen
<?php

$content = 'Lorem ipsum dolor sit amet, <a href="http://redaxo.org">REDAXO</a> sadipscing elitr, http://blumbeet.com diam nonumy eirmod tempor.';

$regex = "{ \\b(?<![\">])((https?|ftp):[\\w/\\#~:.?+=&%@!\\-]+?)(?=[.:?\\-]*(?:[^\\w/\\#~:.?+=&%@!\\-]|$)) }x";

echo preg_replace($regex, "<a href=\"$1\">$1</a>", $content);

?>


Wenn du noch ander Protokolle berücksichtigen möchtest, hinter ftp notieren.

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 26. Mär 2011, 13:18

Vergessen zu erwähnen.

Man müsste vorher definieren was eine Url/Link ist bzw was ersetzt werden darf.

www.redaxo.org wird nicht gefunden und somit nicht ersetzt.
http://redaxo.org bzw http://www.redaxo.org dagegen schon.

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon Markus.Lorch » 28. Mär 2011, 16:57

Hi,

sorry für die späte Antwort. War die Tage doch länger an der Hochschule :) Danke für die Tipps und Anregungen und besonderen Dank für die Website Jan ;) Sau cool.

Wenn ihr noch was habt das auch http://www.redaxo.org erkennt wärs noch praktischer ;)

Edit:
Btw hab den hier gefunden:
Code: Alles auswählen
/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi


auch schön kurz. Aber sucht leider auch in HTML. Weng blöd.
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle
Benutzeravatar
Markus.Lorch
 
Beiträge: 635
Registriert: 21. Okt 2007, 16:22
Wohnort: Walheim

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 28. Mär 2011, 17:15

Hej,

meine Regex oben hast du ausprobiert?

Also das was nach Jans provokanten "mach.. ;-)" steht :)

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon Markus.Lorch » 28. Mär 2011, 17:21

äh sorry. Böses phpBB - hat mir das einfach ersetzt ;)

Ich meinte
Code: Alles auswählen
www.redaxo.org
- mit http funktionierts prima.
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle
Benutzeravatar
Markus.Lorch
 
Beiträge: 635
Registriert: 21. Okt 2007, 16:22
Wohnort: Walheim

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 28. Mär 2011, 17:40

Würde ich auf die schnelle so lösen:

Code: Alles auswählen
<?php

$content = 'Lorem www.ipsum.de dolor sit amet, <a href="http://redaxo.org">REDAXO</a> sadipscing elitr, http://blumbeet.com diam nonumy eirmod http://www.tempor.de .';

$regex = array();
$regex[] = "{ \\b(?<![\">])((https?|ftp):[\\w/\\#~:.?+=&%@!\\-]+?)(?=[.:?\\-]*(?:[^\\w/\\#~:.?+=&%@!\\-]|$)) }x";
$regex[] = "{ \\b(?<![\">])(\\s)((www)[\\w/\\#~:.?+=&%@!\\-]+?)(?=[.:?\\-]*(?:[^\\w/\\#~:.?+=&%@!\\-]|$)) }x";

$replace = array();
$replace[] = "<a href=\"$1\">$1</a>";
$replace[] = "$1<a href=\"http://$2\">$2</a>";

echo preg_replace($regex, $replace, $content);

?>


vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 28. Mär 2011, 17:52

Habe den Code noch mal angepast. Schau mal.
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Re: Regex URL Erkennen

Beitragvon Markus.Lorch » 28. Mär 2011, 18:07

Danke für deine Mühe. Funktioniert fast

.com und .me sowie .com.br (wobei ich mit letzterem leben könnte) geht irgendwie nicht. Seh ich grade. Kann aber nicht erkennen woran es liegt.

Edit: Hab da ganz exoktische Domains ;) Kann man nicht schlampig wenn mit "www." beginned solange bis zum nächsten Leerzeichen?

Noch mal edit:
Okay ;) hab mich verkuckt. Passiert garnix.
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle
Benutzeravatar
Markus.Lorch
 
Beiträge: 635
Registriert: 21. Okt 2007, 16:22
Wohnort: Walheim

Re: Regex URL Erkennen

Beitragvon Thomas.Blum » 28. Mär 2011, 18:37

Da braucht man mal deinen Text.

Obiger Testtext funktioniert.
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Nächste

Zurück zu PHP/HTML/CSS/MySQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron