Marko: kniffliger Regulärer Ausdruck gesucht

Hallo Forum,

ich suche gerade nach einem etwas kniffligen regulären Ausdruck, und komme nich t so recht weiter (bin nicht gerade der König auf dem Gebiet).
Das Problem: In einem HTML Text sollen Link URLs  ersetzt werden. Das funktioniert auch schon ganz gut mit:

preg_replace_callback('/href="(\w+.html)"/', array('sitemenu',  translateURLForCMS'), $pText );

Jetzt sollen aber URLs die innerhalb von <textarea>  </textarea> stehen nicht ersetzt werden. Es würde für den Anwendungsfall reichen zu überprüfen, ob vor dem href=...   nirgendwo <textarea und danach nicht </textarea> steht. Auf Sonderfälle mit Verschachtelungen würde ich mal keine Rücksicht nehmen.
Eine Auswertung über XML Funktionen scheidet leider aus, da ich nicht sicher sein kann, dass der Text wohlgeformtes XML ist.

Danke und Grüsse

Marko

  1. Huhu Marko

    preg_replace_callback('/href="(\w+.html)"/', array('sitemenu',  translateURLForCMS'), $pText );

    mach den Ausdruck einfach etwas genauer, dann erübrigt sich auch das Problem mit der Textarea.

    Hier mal in Worten

    "spitze Klammer auf"
    "ein a"
    "whitespace"
    "eine optionale Folge von 'nicht spitze Klammer zu'-Zeichen "
    den Rest hast Du ja schon.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hallo Lulu,

      mach den Ausdruck einfach etwas genauer, dann erübrigt sich auch das Problem mit der Textarea.

      Nein das bringt nichts. Das <a href=""... kann tatsächlich innerhalb einer Textarea stehen. Die Textarea wird nämlich mit Javascript durch einen FCKEditor ersetzt.

      Grüsse

      Marko

      1. Huhu Marko

        Nein das bringt nichts. Das <a href=""... kann tatsächlich innerhalb einer Textarea stehen. Die Textarea wird nämlich mit Javascript durch einen FCKEditor ersetzt.

        Aber dann müssten innerhalb der Textarea auch die richtigen HTML-Entities
        zum Einsatz kommen.
        Also &gt; etc.

        Frag mal auf dem Betzenberg nach oder nimm gleich einen BVBEditor.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
  2. gudn tach Marko!

    Jetzt sollen aber URLs die innerhalb von <textarea>  </textarea> stehen nicht ersetzt werden. [...] Auf Sonderfälle mit Verschachtelungen würde ich mal keine Rücksicht nehmen.

    ok, wenn verschachtelte textareas ausgeschlossen sind, muss nur noch beruecksichtigt werden, dass ein dokument mehrere (nicht verschachtelte) textareas besitzt.

    angenommen der komplette inhalt der datei steht in $file. dann kannst du mit

    $file_parts2=[link:http://www.php.net/manual/en/function.explode.php@title=explode]('<textarea>', $file);  
    $n=count($file_parts2);  
    for($i=1;$i<$n;++$i)  
      $file_parts[$i]=explode('</textarea>', $file_parts2[$i]);  
    
    

    ein 2d-array $file_parts erzeugen, sodass du mit deinem bisherigen regexp bloss $file_parts2[0] und
    die teile $file_parts[1..$n][1] bearbeiten musst.
    anschliessnd baust du alles wieder mit join() wieder zusammen.

    prost
    seth