lithaila: preg_match

Hallo!

Ich habe folgendes Problem:
Ich versuche einen String zu überprüfen, ob ein Wort _nicht_ darin vorkommt, gleichzeitog aber auch, daß bestimmte Wörter drin vorkommen.

z.B:

$string = "Meine Oma fährt im Hühnerstall Motorrad!";

Nun will ich wissen, ob "Oma" und "Motorrad" drin vorkommt, dazwischen aber _nicht_ das Wort "Hühnerstall".

also irgendwie so:

preg_match("/.*?Oma.*?(NICHT: Hühnerstall).*?Motorrad.*?/", $string, $result);

Wie also muss der Teil: (NICHT: Hühnerstall) aussehen ?

  1. Hallo!

    preg_match("/.*?Oma.*?(NICHT: Hühnerstall).*?Motorrad.*?/", $string, $result);

    Wie also muss der Teil: (NICHT: Hühnerstall) aussehen ?

    Ich würde testen ober er enthalten ist (einfacher) und nicht ob er nicht enthalten ist. Man muß es einfach anders betrachten.

    preg_match("/Oma[\w\s]+Hühnerstall[\w\s]+Motorrad/is", $string, $result);

    Es ist schwierig, den bei Hühnerstall (-1 * l) ist der Ausdruck falsch sowie bei Huehnerstall.

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Berichtigung:

      Es ist schwierig, den bei Hühnerstall (-1 * l) ist der Ausdruck falsch sowie bei Huehnerstall.

      Es ist schwierig, den bei Hühnerstal (-1 * l) ist der Ausdruck falsch sowie bei Huehnerstall.

      MfG, André Laugks

      --
      L-Andre @ gmx.de
  2. Hallo lithaila,

    tja, reguläre Ausdrücke (was fürn blödes Wort) können zwar eine ganze Menge, aber eben nicht alles.

    Nun will ich wissen, ob "Oma" und "Motorrad" drin vorkommt, dazwischen aber _nicht_ das Wort "Hühnerstall".

    Wenn du auf die Klausel "dazwischen" verzichten könntest, wäre hier folgender Lösungsansatz:

    (1) Überprüfe, ob "Oma" und "Motorrad" im zu durchsuchenden String vorkommen.

    (2) Überprüfe, ob "Hühnerstall" im zu durchsuchenden String vorkommen.

    (3) Verknüpfe beide Ergebnisse, so wie du sie brauchst, zum Beispiel:

    (Mein_Ergebnis_ist_wahr) wenn (1) und nicht (2)

    1. Ich verwende das Teil in einem preg_match, so dass ich die Überprüfung in einem Ausdruck formulieren muß.

      Aber man kann das Problem wohl reduzieren auf:

      Ich wuerde gerne das abc "zusammenkleben", so dass er alles findet was nicht "abc" ist.

      Wenn man den gesuchten Ausdruck also anwendet, soll rauskommen:

      abc => false
      bca => true
      acb => true
      usw...

      1. Hallo!

        Ich wuerde gerne das abc "zusammenkleben", so dass er alles findet was nicht "abc" ist.

        Zusammen "kleben" geht so: /[1][^b][^c]/i

        ein C das nicht auf ein B folgt und ein B das nicht auf ein A folgt.

        MfG, André Laugks

        --
        L-Andre @ gmx.de

        1. findet alle Zeichen, die nicht a sind ↩︎