Jan: RegExp

Hallo,

ich suche nach einem regulären Ausdruck, der die Wörter "diesen Text darf er parsen" nur dann finden soll, wenn nicht das Wort "nein--" davorsteht. "diesen Text darf er parsen" kann natürlich ein beliebiger Text sein.

Vielen Dank!

Test1: diesen Text darf er parsen Ende

Test1: nein--diesen Text darf er nicht parsen Ende

Ich hatte mir sowas vorgestellt, aber das ist nicht korrekt, das weiß ich.

Test1: ^nein-- Ende

  1. Test1: ^nein-- Ende

    Evt. keine [] drum sondern (^(nein--))(.*)

    Wozu * und ? hintereinander?

    Gruss, Frank

    1. Test1: ^nein-- Ende

      Evt. keine [] drum sondern (^(nein--))(.*)

      ^ <- Das ist nur in eckigen Klammern ein Negator, sonst steht es für den Anfang.

      Wozu * und ? hintereinander?

      Vermutlich damit es das macht, was es soll, Stichwort gieriges Verhalten, siehe Link in meinem anderen Beitrag.

      1. Hi Texter mit x ...

        Ja, stimmt, da war irgendwas mit ^ als Anfang ... die Negation von () ist mir grad entfallen ... zuviel Gummibärchenlimonade und Gummibärchen selbst. ;)

        Danke für den Link. :)

        Ciao, Frank

  2. ich suche nach einem regulären Ausdruck, der die Wörter "diesen Text darf er parsen" nur dann finden soll, wenn nicht das Wort "nein--" davorsteht.

    So in etwa: '/(?<!nein--)diesen Text darf er parsen/'
    siehe da, http://www.devmag.net/webprog/regulaere_ausdruecke.htm

    1. gudn tach!

      ich suche nach einem regulären Ausdruck, der die Wörter "diesen Text darf er parsen" nur dann finden soll, wenn nicht das Wort "nein--" davorsteht.

      So in etwa: '/(?<!nein--)diesen Text darf er parsen/'

      genau.

      allerdings ist

      http://www.devmag.net/webprog/regulaere_ausdruecke.htm

      imho keine gut erklaerende seite. besser sind da z.b. das perl-manual, sowie das php-manual:

      http://perldoc.perl.org/perlre.html
      http://de3.php.net/manual/en/regexp.reference.php

      prost
      seth

    2. Danke für die Tipps.

      Der Text "diesen Text darf er parsen" kann ja variieren. Leider sind nun mit diesem RegExp beide Zeilen erfüllt.

      /Test1: (?<!nein--)(.*?) Ende/

      Test1: diesen Text darf er parsen Ende

      Test1: nein--diesen Text darf er nicht parsen Ende

      Habt Ihr noch einen Tipp`?

      1. /Test1: (?!nein--)(.*?) Ende/

        scheint zu gehen.

        (?!xxx)
        Negiert das angegebene Pattern und wirkt sich auf das vorangehende aus.

        Beispiel: /text1(?!text2)/

        Trifft auf eine Zeichenkette zu, die "text1" enthält, aber kein "text2" danach.

        1. gudn tach!

          /Test1: (?!nein--)(.*?) Ende/

          scheint zu gehen.

          ja, denn das bedeutet, dass nach dem string "Test1: " nicht direkt der string "nein--" folgen darf.

          es wuerde aber z.b. schon ein leerzeichen mehr genuegen, also
            Test1:  nein-- foo Ende
          um die verneinung zu umgehen. je nach anwendung wird das egal sein. ich sag's bloss sicherheitshalber mal dazu.

          prost
          seth

      2. gudn tach!

        /Test1: (?<!nein--)(.*?) Ende/

        du hast dir zwar mittlerweile schon eine loesung erarbeitet, dennoch kurz fuer's archiv die erklaerung, dass obiger regexp _niemals_ matchen kann:

        (?<!schwazze) ist eine zero-width negative look-behind assertion, das heisst
          /(?<!schwazze)schoggo/
        matcht ein "schoggo", dem kein "schwazze" voransteht. das "schwazze" selbst wird nicht gematcht.
          print $1 if 'weisseschoggo'=~/((?<!schwazze)schoggo)/;
        liefert also "schoggo".
        dagegen liefert
          print $1 if 'weisseschoggo'=~/(weisse(?<!schwazze)schoggo)/;
        tatsaechlich "weisseschoggo", allerdings wird hier auch deutlich, dass "(?<!schwazze)" hier nun voellig ueberfluessig ist, da ja bereits verlangt wird, dass vor dem "schoggo" der string "weisse" steht. somit kann ja auch gar nicht mehr "schwazze" vor "schoggo" stehen.
        deshalb ist der ausdruck
          /(weisse(?<!schwazze)schoggo)/
        aequivalent zu
          /(weisseschoggo)/

        und somit ist
          /Test1: (?<!nein--)(.*?) Ende/
        aequivalent zu
          /Test1: (.*?) Ende/
        d.h., das "nein--" wird gar nicht beachtet.

        prost
        seth

      3. Der Text "diesen Text darf er parsen" kann ja variieren.

        Die RegExp auch. Da Du was finden wolltest, dachte ich Du würdest jeweils wissen was Du finden willst, auch wenn es variiert.