regulärer Ausdruck (Zeichenkette soll fehlen)



  • Ich suche einen regulären Ausdruck um zu sichern, daß eine Zeichenkette sich nicht in einem string befindet.
    Ich möchte damit sämtliche Dateien in einem Verzeichnis darstellen, deren Name nicht .chk. beinhaltet.

    die selbe Funktion soll allerdings auch überprüfen können, ob ein String vorhanden ist, wodurch ich nicht einfach ein !preg_match() machen kann.

    ich denkt mir ja sowas wie
    /[^(.chk.)]/
    aber des geht so nich 😞

    hat wer noch ne Idee?



  • Warum nicht einfach so:

    if(strpos($filename,'.chk.') === false)
    {
        // kommt nicht vor
    }
    else
    {
        // kommt vor
    }
    

    Falls du es aus welchen Gründen auch immer mit einem regulären Ausdruck machen willst: du musst wohl den . escapen (nur Vermutung), da er sonst als Steuerzeichen für ein beliebiges Zeichen angesehen wird.



  • Der reguläre Ausdruck kann so oder so nicht dem Zweck dienen, da [^(.chk.)] eine Zeichenklasse definiert, und immer nur mit einem Zeichen übereinstimmt. Also gibt die Regex nur bei Zeichenketten true zurück, in denen keine offene Klammer, kein Punkt, kein 'c', kein 'h', kein 'k' und keine geschlossene Klammer vorkommt. Du müsstest also entweder die Regex /\.chk\./ verwenden und die Logik mit flags oder mit Scriptcode invertieren.

    Ich würde aber in so einem trivialen Fall von Stringsuche dem Rat von flenders folgen, und die einfache Funktion strpos verwenden...


Anmelden zum Antworten