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