Fabian: Regulärer Ausdruck

Hi!

Ich suche seit einiger Zeit eine Möglichkeit, wie ich eine Zeichenkette prüfen kann.

Diese Zeichen kette darf nur Kleinbuchsaben, Ziffern und den Unterstrich enthalten. Aber KEINE Leerzeichen.

Ich bin am Verzweifeln.

Fabian

  1. Ich suche seit einiger Zeit eine Möglichkeit, wie ich eine Zeichenkette prüfen kann.

    Diese Zeichen kette darf nur Kleinbuchsaben, Ziffern und den Unterstrich enthalten. Aber KEINE Leerzeichen.

    Ich bin am Verzweifeln.

    Völlig unnötig, was Du suchst, ist (wiedermal) nur zwei Klicks von der Startseite der PHP-Anleitung entfernt:

    http://www.php.net/manual/de/function.preg-match.php
    http://www.php.net/manual/de/pcre.pattern.syntax.php

    Was Du als Muster brauchst, ist eine sich wiederholende ("Repetition") Zeichengruppe ("character class"), sowie ^ und $, um das Muster am Anfag bzw. Ende des Textes "festzumachen".

    Gruß,
      soenk.e

    1. Völlig unnötig, was Du suchst, ist (wiedermal) nur zwei Klicks von der Startseite der PHP-Anleitung entfernt:

      Kann gut sein, dass das für dich nur zwei klicks weg ist.

      Ich habe aber noch nie richtig mit regulären Ausdrücken gearbeitet und desshalb eigentlich keine Ahnung wie das ganze funkioniert. In den Büchern, die ich bisher gelesen habe ist das nur unzureichend erläutert worden.

      Mein Englisch ist ausserdem noch nicht gut genug (10. Klasse Gymnasium), als dass ich genug verstehen würde um nach der Anleitung von php.net einen richtigen regulären Ausdruck zusammenbauen zu können.

      Fabian.

      1. Huhu Fabian

        Ich habe aber noch nie richtig mit regulären Ausdrücken gearbeitet und desshalb eigentlich keine Ahnung wie das ganze funkioniert. In den Büchern, die ich bisher gelesen habe ist das nur unzureichend erläutert worden.

        Für Deinen Fall sollte es dies tun.

        $test="lauter_kleine_buchstaben123";

        if(preg_match('/[1]*$/',$test)){
         echo "OK ist gut";
        }else{
         echo "Nö ist nicht gut";
        }

        Zwischen den /s steht der eigentliche reguläre Ausdruck
        ^ bedeutet Anfang der zu prüfenden Zeichenkette
        $ bedeutet Ende der zu prüfenden Zeichenkette
        in [] steht eine Definition einer Menge von Zeichen
        in diesem Fall Kleinbuchstaben "a-z", Zahlen "0-9" und der Unterstrich "_"

        * bedeutet beliebige Wiederholung des vorangehenden Zeichens bzw. in diesem Fall der Menge von Zeichen.

        Viele Grüße

        lulu


        1. a-z0-9_ ↩︎

      2. Völlig unnötig, was Du suchst, ist (wiedermal) nur zwei Klicks von der Startseite der PHP-Anleitung entfernt:

        Kann gut sein, dass das für dich nur zwei klicks weg ist.

        Mein Englisch ist ausserdem noch nicht gut genug (10. Klasse Gymnasium), als dass ich genug verstehen würde um nach der Anleitung von

        Also die PHP-Anleitung gibt es (zu einem Teil) auch auf Deutsch und auf der Hauptseite ist sogar wortwörtlich "Reguläre Ausdrücke" aufgelistet. Ich bin mir ziemlich sicher, daß auch Du zumindest bis zur Funktion preg_match() mit wenigen Klicks findest, so fürchterlich schlecht dürfte Dein Englisch in der 10. nicht sein ;)

        • Das Muster muß in Schrägstriche eingebettet sein.
        • Möchtest Du, daß an einer Position im Muster nur ein bestimmtes Zeichen aus einer Auswahl zutrifft ("character class"), gibst Du diese Zeichen in eckigen Klammern ein ("square brackets"). Einen Bereich von zum Beispiel a bis z kannst Du mit Bindestrich abkürzen: a-z.
          Deine Auswahl ist also [a-z0-9_].
        • Soll ein Teil des Musters mehr als einmal vorkommen, kannst Du hinter diesem Teil die Anzahl der Wiederholungen angeben ("Repetition"). Das geht exakt über minimale und maximales Vorkommen mit geschweiften Klammern oder (häufiger), mit * (0 oder mehrmals), + (ein- oder mehrmals) und ? (0 oder einmal).
          Du möchtest sicher ein- oder mehrmals: +. Soll dein Text auch leer sein dürfen, nimm das Sternchen.
        • Es wird normalerweise nur verglichen, ob das angegebene Muster irgendwo im Text passt. Du kannst aber mit einem ^ am Anfang angeben, daß das Muster am Anfang des Textes passen muß und mit einem $ am Ende, daß dort das Ende des Textes sein muß. Damit das Muster auf den ganzen Text zutrifft, schreibst Du vorne ein ^ und hinten ein $.

        Dein gesuchtes Konstrukt lautet dementsprechend

        /[1]+$/

        Also:
        1. Außenrum die Schrägstriche.
        (^ weiter unten)
        2. Eine Auswahl an Zeichen, erkennbar an den eckigen Klammern, und zwar aus dem Bereich a bis z, 0 bis 9 sowie dem Unterstrich. Diese eckige Klammer stellt für sich nur ein Zeichen dar, es darf an dieser Stelle also nur wirklich ein Zeichen vorkommen.
        3. Da in Deinem Text mehrere Zeichen vorkommen dürfen, setzt Du hinter die eckige Klammer ein +, d.h. der Inhalt der eckigen Klammer darf ein- oder mehrmals vorkommen.

        Ohne ^ und $ würde dieses Muster auf jeden Text zutreffen, weil vor und hinter dem Muster beliebige Dinge erscheinen dürfen:

        WQER_a9_QWFWQ

        würde passen, weil hier in der Mitte ein _a9_ steht.

        4. Damit der Bereich [a-z0-9_] gleich am Anfang des Textes stehen muß, kommt das ^ vornevor. Damit passt obiges Beispiel nicht mehr.

        5. Da jetzt immernoch

        _a9_QWFWQ

        passt, kommt an's Ende ein $, d.h. nach dem Bereich [a-z0-9_] muß das Ende des Textes kommen.

        Ich hoffe, das war halbwegs verständlich. Spiel ein bißchen mit dem Krams rum, mach ^ und/oder $ weg, ändere die Wiederholung oder den Inhalt der Zeichenklasse, so lernt man am Besten.
        preg_match() kann mit zwei oder drei Argumenten aufgerufen werden. Wird ein drittes angegeben, schreibt preg_match() da die Textstelle rein, die auf das Muster passt. Damit kannst Du vergleichen, was genau passt, nicht nur das etwas passt:

        echo preg_match("/[2]+$/","Ein langer Text der wegen der Großbuchstaben und des ß nicht passen wird",$match);
        print_r($match);

        Und guck unter den oben genannten englischen Stichwörtern in die Anleitung.

        Gruß,
          soenk.e


        1. a-z0-9_ ↩︎

        2. a-z0-9_ ↩︎

        1. Danke!

          Ich glaube jetzt habe ich reguläre Ausdrücke soweit verstanden.

          Bei meinen eigenen Versuchen war ich sogar schon soweit gekommen, dass ich den Ausdruck in den eckigen Klammern richtig, am Anfang ein ^ und die Schrägtriche hatte. Den Rest ($+) hatte ich aber noch nicht.

          Jetzt kannst du dir hoffentlich vorstellen, wie verzweifelt ich bei den Tests war, als der Ausdruck nur manchmal gepasst hat :-)

          Fabian