phpbar.de logo

Mailinglisten-Archive

[php] Alle noch nicht anklickbaren Links anklickbar machen

[php] Alle noch nicht anklickbaren Links anklickbar machen

Yannik Hampe yannik at cipher-code.de
Mi Apr 14 17:20:07 CEST 2010



Ralf Eggert wrote:
> Hallo Yannik,
> 
> habe noch eine Idee. Wäre es möglich, dies so umzuschreiben, dass er
> alle Links findet, die NICHT von " und " bzw. von > und < umschlossen sind?
> 
> preg_match_all(
>    '=((http:|https:)\/\/[^ )\r\n!<"]+)=i', $htmlBody, $linkList
> );
> 
> Hast du da eine Idee? Habe das Prinzip der "negative lookahead
> assertion" leider noch nicht ganz geblickt.

Ahso ja, das war sogar ein Denkfehler von mir. Ich wollte nach urls IM 
<a>-tag suchen: <a href="...">http://...</a>. Wenig hilfreich natürlich.

Mit Hilfe der negative look ahead assertion könnte man deine Idee so 
umsetzen:

=((http:|https:)//[^ )\r\n!<"]++)(?!")=i

Damit findest du links hinter denen kein " folgt. Damit hast du schon 
eine recht hohe Trefferquote. Wenn in deinem Quelltext " auch brav durch 
&quot; ersetzt worden sind, dann gibt es nurnoch seltene ausnahmen, die 
dir Probleme machen könnten (zum Beispiel <img src="..." alt="Dieses 
Bild habe ich auf http://example.com heruntergeladen" /> ).
Sowas könntest du noch verhindern in dem du dein regex dazu ausbaust zu 
erkennen, ob es sich in einem tag befindet (vor dem nächsten > muss ein 
< kommen oder es darf kein > mehr kommen).

Hier steht noch ein bißchen was über Assertions:
http://www.regenechsen.de/phpwcms/index.php?regex_allg_option
> 
> Danke und Gruss,
> 
> Ralf

Yannik

php::bar PHP Wiki   -   Listenarchive