RegExp: UND-Verknüpfung bei beliebiger Position

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

  • RegExp: UND-Verknüpfung bei beliebiger Position

    Hallo,

    gibt es eine Möglichkeit, bei regulären Ausdrücken eine UND-Verknüpfung zu formulieren, ohne dabei die Reihenfolge zu beachten? Ich kratze mir gleich die Haare vom Kopf.

    Beispiel:

    $string1 = 'hallo-dummy-jemand-blah';
    $string2 = 'jemand-hallo-blah-dummy';

    Ich möchte nun z. B. prüfen, ob "dummy" UND "blah" vorkommen, ohne zu wissen, an welcher Stelle sich beide befinden.

    Bei bekannter Reihenfolge ist das kein Problem, ebenso wenig bei einer ODER-Verknüpfung. Aber das UND ...

    Natürlich könnte man zuerst nach "dummy" und anschließend nach "blah" suchen, was jedoch bei einer beliebigen Anzahl der Suchbegriffe nur in einer komischen Schleife enden würde.

    Vielen Dank

    pb

  • #2
    hi,

    ich hätte jetzt nur eine mitteprächtige Lösung anzubieten..

    http://regexp-evaluator.de/evaluator...4f6c/#ergebnis

    Wüsste persöhnlich auch keine andere Methode, wenn es keine bekannte Reihenfolge gibt..

    mfg

    Kommentar


    • #3
      Vielen Dank,

      bei dieser Lösungsidee war ich auch bereits, jedoch tritt hier das Problem auf, dass der Ausdruck auch dann zutrifft, wenn nur einer der Suchbegriffe vorkommt, z. B. bei "hallo-dummy-jemand" ...
      Andernfalls spätestens dann, wenn sich einer der gesuchten Teile wiederholt, z. B. bei "hallo-dummy-jemand-dummy".

      Dennoch danke

      Kommentar


      • #4
        Ich suche gerade nach einer Regex-Lösung, aber reicht nicht ein simples
        PHP-Code:
        if ((strpos($text$word_1) !== false) &&
            (
        strpos($text$word_2) !== false))
        {


        für diesen Zweck aus?

        Grüße
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Probiers mal hiermit:
          Code:
          \bword_1\W+(?:\w+\W+)*word_2\b
          Hat in meinen (knappen) Tests geklappt.

          Grüße
          EDIT:

          Ausdruck editiert

          Zuletzt geändert von Griecherus; 17.05.2008, 15:30.
          Nieder mit der Camel Case-Konvention

          Kommentar


          • #6
            @Griecherus:

            Mit strpos etc. kann ich nicht arbeiten, da es sich um durchaus komplexere Ausdrücke handelt. In meinem Beispiel habe ich das lediglich vereinfacht dargestellt. An regulären Ausdrücken komme ich nicht vorbei.

            Äquivalent zu Deinem Beispiel könnte ich natürlich mit

            if (regex(blah) && regex(dummy)) ...

            arbeiten, was meines Erachtens nach jedoch nicht unbedingt die beste Lösung ist. Zumal es eine variable Anzahl an zu suchenden Ausdrücken sein soll, wodruch ich n regex-Abfragen in einer Schleife durchführen müsste.

            Dein zweiter Vorschlag klappt bei mir nicht.
            Code:
            $string = 'blah-fasel-dummy';
            
            preg_match("#\bblah\W+(?:\w+\W+)*fasel\b#", $string);
            Ehrlich gesagt kann ich ihn auch nicht nachvollziehen *G*.

            Kommentar


            • #7
              Original geschrieben von plastikbaum
              @Griecherus:

              Dein zweiter Vorschlag klappt bei mir nicht.
              Code:
              $string = 'blah-fasel-dummy';
              
              preg_match("#\bblah\W+(?:\w+\W+)*fasel\b#", $string);
              Ehrlich gesagt kann ich ihn auch nicht nachvollziehen *G*.
              Hm, bei mir schon. Und regex-evaluator.de spielt auch mit.
              Zu dem Pattern: Mach dich mal in Sachen word boundaries schlau. Was genau kannst du nicht nachvollziehen?

              Grüße
              Nieder mit der Camel Case-Konvention

              Kommentar

              Lädt...
              X