Ralf: Regex Problem

Hi,

ich muss erkennen, ob in einem Text ein Textteil der Form '****201*-****' (* = beliebige Ziffer)steht.

Mein Regex:
preg_match('/[0-9]{4}[201][0-9][-][0-9]{4}/', $text, $matches);

Bei $text = 'blabal  07122013-7781 blabal';
sollte in $matches[0] doch eigentlich '07122013-7781' stehen. Es steht aber nur '122013-7781' drin.

Was mache ich falsch?

Gruß
Ralf

  1. Hi,

    ich muss erkennen, ob in einem Text ein Textteil der Form '****201*-****' (* = beliebige Ziffer)steht.

    Mein Regex:
    preg_match('/[0-9]{4}[201][0-9][-][0-9]{4}/', $text, $matches);

    Bei $text = 'blabal  07122013-7781 blabal';
    sollte in $matches[0] doch eigentlich '07122013-7781' stehen. Es steht aber nur '122013-7781' drin.

    Was mache ich falsch?

    Du willst 201 matchen, suchst an der Stelle aber nur nach einer(!) der Ziffern 2, 0 oder 1.

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. Hi,

      Du willst 201 matchen, suchst an der Stelle aber nur nach einer(!) der Ziffern 2, 0 oder 1.

      Und wie suche ich nach '****201*-****' (* = beliebige Ziffer)?

      1. Hi,

        Du willst 201 matchen, suchst an der Stelle aber nur nach einer(!) der Ziffern 2, 0 oder 1.
        Und wie suche ich nach '****201*-****' (* = beliebige Ziffer)?

        Warum fragst du noch mal nach den beliebigen Ziffern, die hast du doch schon?

        Du weißt, was die eckigen Klammern bedeuten? Warum benutzt du sie dann an der Stelle?

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
  2. Hallo,

    preg_match('/[0-9]{4}[201][0-9][-][0-9]{4}/', $text, $matches);
                         ^^^^^

    Der reguläre Ausdruck

    /201/

    findet die Zeichenkette »201«. Genau drei Zeichen, genau diese Zeichen, genau diese Reihenfolge.

    Der reguläre Ausdruck

    /[201]/

    findet genau EIN Zeichen, das entweder »2«, »0« oder »1« ist.

    […] ist eine sogenannte Character Class (Zeichenklasse), eine Menge von *einzelnen* Zeichen, die *alternativ* vorkommen können.

    Wird dir der Unterschied klar und was du eigentlich suchst?

    Mathias