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.

das eigentliche problem lag an etwas ganz anderem:
[\S^>^"] macht nicht, was du moechtest. hab mir das heute mittag gar nicht genau genug angeschaut. das negations-dach ^ kann nur eine komplette zeichenklasse negieren, also z.b. [^a-zA-Z] sind alle zeichen, ausser buchstaben. [\S^>^"] ist das gleiche wie [\S^>"] (^ als zeichen, nicht als negation). und das ist das gleiche wie \S, (ohne komma) da ^>" bestandteil von \S sind.

zuerst s/href=([^"])/href="\1/g und dann
Verstehe ich (noch) nicht...

sorry, ich dachte, dass jeder, der sich mit regulaeren ausdruecken beschaeftigt hat, auch die perl-syntax kennt.
ich meinte, dass ggf. " ergaenzt werden soll...

$html_body=preg_replace('/((?i)href=)"(?!(?:mailto:|http:))([\S^>^"]*)(?:")?/', '\1"index.php?aktion=informationen&thema='.$ref_korrektur.'\2"', $html_body);

hinten der teil (?:")? ist uebrigens doof geschrieben (ist mir aber erst eingefallen, als ich schon nicht mehr am rechner sass). besser ist einfach "?, also waere der vollstaendige kram nun:

$html_body=preg_replace('/href=([^"> ]+)([> ])/', 'href="\1"\2', $html_body);
$html_body=preg_replace('/((?i)src=)"?([^>" ]*)"?/', '\1"'.$ref_korrektur.'\2"', $html_body);
$html_body=preg_replace('/((?i)href=")(?!(?:mailto:|http:))([^>" ]*")/', '\1index.php?aktion=informationen&thema='.$ref_korrektur.'\2', $html_body);

prost
seth