RegExp: UND-Verknüpfung bei beliebiger Position

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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

      Comment


      • #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

        Comment


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

          Grüße
          EDIT:

          Ausdruck editiert

          Last edited by Griecherus; 17-05-2008, 14:30.
          Nieder mit der Camel Case-Konvention

          Comment


          • #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*.

            Comment


            • #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

              Comment

              Working...
              X