phpbar.de logo

Mailinglisten-Archive

[php] Alle noch nicht anklickbaren Links anklickbar machen

[php] Alle noch nicht anklickbaren Links anklickbar machen

Ralf Eggert r.eggert at travello.de
Fr Apr 16 06:57:32 CEST 2010


Moin Yannik,

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

Ich habe das nun mal ausprobiert. Habe auch den Beispieltext ein wenig
geändert, um zu sehen, was er findet:

------------------------------------------------------------------------
Hier steht ein http:/www.link.de und hier steht noch ein <a
href="http:/www.anderer-link1.de">http:/www.anderer-link2.de</a>
------------------------------------------------------------------------

Mit dem Ausdruck findet er http:/www.link.de und
http:/www.anderer-link2.de, was ja auch logisch ist. Ich habe nun ein
wenig herumprobiert, ob ich (?!") so abändern kann, dass er auch ein
folgendes < ausschliesst. Bin daran leider gescheitert.... :-(

> 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).

Würde ich gerne machen, wenn ichs kapiert habe... ;-)

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

Dann habe ich mir deinen Link durchgelesen und was von negativer
Lookbehind-Assertion gelesen. Und siehe da! Folgende Regex löst mein
Problem.

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

Nur das von dir angesprochene Problem mit der URL im ALT-Text habe ich
damit noch nicht gelöst. Aber das könnte ich versuchen, vorher
rauszufiltern. Und ich habe ein Problem, wenn der Link unter einem <br
/> steht, dann wird der auch nicht gefunden. Mistmüll!

Danke und Gruss,

Ralf

php::bar PHP Wiki   -   Listenarchive