Martin Hein: Entwicklung eines regulären Ausdrucks

Hallo Forum,

ich stehe vor folgender Aufgabe:

Ich muss im XHTML-Code einer Website Text-Ersetzungen vornehmen.
Also einfach search & replace. Die Schwierigkeit dabei ist,
diese Ersetzungen nur in dem vom Browser dargestellten Text
vorzunehmen (nicht z.b. in Pfadangeben). Ich muss also einen
regulären Ausdruck entwickeln, bei dem das Suchmuster nur den vom Browser als Text dargestellten String findet. Naheliegend
erscheint mir folgende Behauptung:

Text der von '><' eingeschlossen ist, wird als Text dargestellt.

Ist dem so ?

Gegenprobe:
-----------
<html><head><title>text</title></head>

  1. ...title '>text<' </title ... : passt
  2. ...head '><title>text</title><' /head ... : passt aber auch

Ich bin mit regulären Ausdrücken blutiger Anfänger. Daher
stellt sich mir die Frage:

Lässt sich der reguläre Ausdruck so defnieren, dass er im
zweiten Beispiel nicht matched ?

danke und

beste gruesse,
martin

  1. gudn tach!

    die frage kommt oefters. schau dir mal im thread </archiv/2007/11/t161925/#m1053366> die antworten von EisFuX und mir an; und zwar ab </archiv/2007/11/t161925/#m1053426>.
    es werden dort zwei moeglichkeiten genannt (die von EisFuX ist vermutlich schneller) und es wird darauf hingewiesen, dass es einschraenkungen gibt.

    prost
    seth

    1. Hallo,

      ich hab mir die Lösung angesehen, nicht verstanden (weil ich blutiger regex-Anfänger bin ;( ) und versucht den Ausdruck
      für Homesite selbst mal zu versuchen. Ich hab mir das Beispiel
      im Thread genommen:

      <tomate banane >banane</tomate>  banane zitrone banane gurke banane erdbeere<banane >orange banane</banane>

      und als suchmuster  :  >([^<>]*)banane([^<>]*)<
      und als ersetzung   :  >\1gurke\2<

      ... eingesetzt. Das hat mit dem Teststring das gemacht, was es
      sollte. Prima ! ... aber mir ist schon aufgefallen, dass dein
      Lösungsvorschlag wesentlich komplexer ist.

      Scheitert meiner ?

      danke und

      beste gruesse,
      martin

  2. Hallo,

    Text der von '><' eingeschlossen ist, wird als Text dargestellt.

    Ist dem so ?

    Ja, aber es reicht nicht ganz. Ich fürde es so formulieren:
    Text der von '><' eingeschlossen ist und nicht selbst ">" oder "<"enthält, also:

    />([!<>]+)</s

    Der Zusatz s bewirkt, dass der Text auch über Zeilenenden hinaus erkannt wird.
    Es muss natürlich sichergestellt sein, dass "<" oder ">" nicht als normaler Text vorkommt.

    Gruß, Don P