regex strings ausschließen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • regex strings ausschließen

    Hi,

    habe bis jetzt noch keine Möglichkeit gefunden bei regulären Ausdrücken ganze Strings zu negativieren.

    Bei Zeichenklassen geht das ja recht einfach durch [^a-c]. Ich bräuchte allerdings eine Methode, womit ich auch ganze Strings ausschließen kann.

    ^string funktioniert natürlich nicht, da das Zirkumflex hier für den Start eines Strings steht.

    Wie kann ich es lösen, dass ein Text nur gematcht wird, wenn ein bestimmter String nicht enthalten ist ?


    Beispiel:

    Das ist ein Test String

    jetzt möchte ich z. B. dass das Wort "Test" nicht vorkommen darf.

    Hat irgendjemand eine Ahnung wie und ob das zu lösen ist ?


    hemfrie

  • #2
    PHP-Code:
    $string "ich bin ein Test"
    if(
    preg_match("|(.*?)(Test)(.*?)|si"$string)) {
    die(
    "Lass das!");

    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Hi Schmalle,

      danke für Deine schnelle Antwort. Mein Beispiel war vielleicht zu stark vereinfacht.

      Ich suche auf jeden Fall eine Lösung, mit der ich schon im Pattern Strings auschließen kann. Eine if-Abfrage auf das preg_match() bringt in diesem Fall natürlich das gewünschte Ergebnis, würde aber schnell bei komplexeren Patterns an seine Grenzen stoßen.

      Das Hauptproblem, warum ich nicht mit if-Abrfagen (bezogen auf das preg_match) arbeiten kann ist aber, dass ich das Pattern nicht in PHP benutze, sondern in einem Suchprogramm.

      Wenn ich jetzt z. B. in dem Suchprogramm nach allen Links suche, die auf Google linken aber in den Get-Parametern kein q=test enthalten dürfen, dann komme ich nicht darum den String "q=test" auszuschließen.

      PHP-Code:
      $pattern="~<a[^>]*google\.de[^>(q=test)]*>~i"
      [^>(q=test)] ist natürlich falsch, soll nur darstellen wie ich mir das ungefähr vorstelle.

      Ich hoffe ich hab mich jetzt nicht zu verwirrend ausgedrückt


      hemfrie

      Kommentar


      • #4
        hmm,
        Ich hoffe ich hab mich jetzt nicht zu verwirrend ausgedrückt
        wenn ich dich richtig verstanden hab, suchst du nach foo, das nicht von bar gefolgt wird?
        foo(?!bar) matches any occurrence of "foo" that is not followed by "bar".
        Code:
        #(google\.com(?![^"]*q=test))#isU
        http://pcre.nophia.de/evaluate/index...2138c9a860e5ca
        oder, für vollständige links
        Code:
        #<a[^>]+href="(http://www.google\.com(?![^"]*q=test))[^>]+>[^<]+</a>#isU
        http://pcre.nophia.de/evaluate/index...0e5fe599386cfd

        so etwas?

        schau mal nach 'Assertions'
        http://www.php-resource.de/manual.ph...pattern.syntax
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          wow, genau das hab ich gesucht. Hatte es selber auch schonmal mit lookahead und lookbehind versucht, jedoch nicht ganz die richtige Syntax hinbekommen.

          Vielen Dank für Deine super kompetente Hilfe.
          Cooles Tool übrigens


          hemfrie

          Kommentar


          • #6
            Vielen Dank für Deine super kompetente Hilfe.
            bitte.
            Cooles Tool übrigens
            ja, zum regexp finden ists ganz nützlich ^^
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar

            Lädt...
            X