speedy: RegExp für "finde das" und "das nicht!"

Hi Forum,

ich bastle ein wenig mit RegExps rum und brauche einen Ausdruck, der bei Wortzeichen wahr ist, ausser bei "xy" und "yz". D.h. es gibt ein paar Wörter, die _nicht_ substituiert werden sollen.

Ich hab schon ein wenig mit rumgebastelt, das war aber wohl der falsche Ansatz X-)

Viele Grüsse und danke
speedy

  1. Hallo speedy,

    kann sein, daß ich Dein Problem nicht ganz erkannt habe, aber was spricht für zwei verschachtelte Abfragen? Wenn Du in einer Abfrage prüftst ob es Wortwerte sind und innerhalb dieser dann ob es bestimmte unerwünschte Werte sind/nicht sind.

    Gruße aus Bayreuth
    Julian

    1. Hi,

      kann sein, daß ich Dein Problem nicht ganz erkannt habe, aber was spricht für zwei verschachtelte Abfragen? Wenn Du in einer Abfrage prüftst ob es Wortwerte sind und innerhalb dieser dann ob es bestimmte unerwünschte Werte sind/nicht sind.

      die Substitution sieht so aus:
      s/##CMS:UNI:CGI:(\w+)##/$cgidata{$1}/go;
                          ^^^^^^
      Wenn in dem geklammerten Bereich eben bestimmte Strings vorkommen, soll die Substitution nicht ausgeführt werden. Wenn mir dafür nix einfällt, muss ich wohl Deinen Weg gehen...

      Viele Grüsse aus Kulmbach
        speedy

      1. Mit [zugelasseneZeichenhiereingeben] kann man bestimmte Zeichen zulassen,
        mit ![] müßte man sie verbieten, wenn ich mich jetzt nicht irre.

      2. Hallo speedy,

        [...]

        s/##CMS:UNI:CGI:(\w+)##/$cgidata{$1}/go;
                            ^^^^^^
        Wenn in dem geklammerten Bereich eben bestimmte Strings vorkommen, soll die Substitution nicht ausgeführt werden.

        [...]

        Ich war leider zu faul, mir eine komplexe Lösung für die RegEx auszudenken ;-), habe aber eine einfache Version anzubieten *bg*
        Verlager doch Dein Problem der Überprüfung ob ersetzt werden soll oder nicht von der linken Seite auf die rechte Seite.

        untested:

        s/blablabla(\w+)bla/&checkword($1,$&,%cgidata)/ge;

        sub checkword {
           my($word, $match, $cgidata) = @_;
           return (($word eq "unwort1" $word eq "unwort2") ? $match : %{$cgidata{$word}});
        }

        Oder versuchs doch mit Deiner ursprünglichen Variante ;-)
        untested:
        s/##CMS:UNI:CGI:(wort1wort2wort3wort4)##/$cgidata{$1}/go;

        Das könnte auch funktionieren, wobei ich allerdings die erste Version präferieren würde *g*

        Gruß AlexBausW

        1. Hi,

          krass gute Idee (die 1. Variante). Dankeschön.

          CU
          speedy