seth: (PHP) verstehe meine regexp nimmer...

Beitrag lesen

gudn tach!

  1. Warum scheitert meine regexp nicht an "mailto:" und "http:"?

wegen dem fragezeichen im "? davor, denke ich.
Nein, das Fragezeichen sagt nur, dass das " optional ist, also auch fehlen kann.

ja, das weiss ich. ich dachte jedoch, dass eben gerade diese optionalitaet in konflikt geraten koennte mit dem zero-width negative look-ahead-muster (?!...). vielleicht kann da jemand etwas zu sagen, der's genau weiss.

hab mir noch mal gedanken darueber gemacht:
angenommen wir durch suchen den string
$html_body='<a href="http://www.bierdatenbank.de/index.php">bdb</a>';

dann findet
/((?i)href=)"?(?!mailto:|http:)([^>" ]*)"?/
folgendes:

regexp             |  gefunden
-------------------+-----------------------------------------
((?i)href=)        |  href=
"?                 |  (kein ")
(?!mailto:|http:)  |  (also auch kein mailto: oder http:)
([^>" ]*)          |  (nix, da " naechstes zeichen)
"?                 |  " (weil gierig)

also insg. wir bloss href=" gefunden.

deswegen besser vorher, wie im anderen ast bereits erlaeutert, die urls mit " vorne und hinten versehen und dann:
/((?i)href=")(?!mailto:|http:)([^>" ]*")/

prost
seth