$re = '/(?i)^(01|04|21|31)(\d{10})?(\d{1}>)(\d{16,27})\+\s+(\d{5,9})>/m';
$str = '0100003949753>210000000003139471430009017+ 010001628>
0100000023651>000551106208600215460130935+ 010058907>
2100000440001>961116900000006600000009284+ 030001625>
042>000000676817431677100399580+ 010107280>
319>961116900000006600000009284+ 030001625>
Absichtliche Fehler;
-0100003949753>210000000003139471430009017+ 010001628>
0100-000023651>000551106208600215460130935+ 010058907>
2100000440001>9611169000000006600000009284+ 030001625>
042>00000067681743167710.0399580+ 010107280>
319>961116900000006600000009284+ 030001.625>
0100003949753>210000000003139471430009017+ 010001628>
#1: ESR 9/27, CHF 3949.75, Ref 210000000003139471430009017, Tn 010001628 (01-162-8)
#2: ESR 9/27, CHF 23.65, Ref 000551106208600215460130935, Tn 010058907 (01-5890-7)
#3: ESR 9/27, EUR 440.00, Ref 961116900000006600000009284, Tn 030001625 (03-162-5)
#4: ESR+ 9/27+ CHF ?? Ref 000000676817431677100399580, Tn 010107280 (01-10728-0)
#5: ESR+ 9/27+ EUR ??.?? Ref 961116900000006600000009284, Tn 030001625 (03-162-5)
ESR oder ESR+
Gruppe1:
01 = ESR in CHF
04 = ESR+ in CHF
21 = ESR in EUR
31 = ESR+ in EUR
Nicht beachtet:
11 = ESR in CHF zur Gutschrift auf das eigene Konto
14 = ESR+ in CHF zur Gutschrift auf das eigene Konto
23 = ESR in EUR zur Gutschrift auf das eigene Konto
33 = ESR+ in EUR zur Gutschrift auf das eigene Konto
Gruppe2: Betrag (bei ESR+ nicht vorhanden/leer)
Gruppe3: Prüfcode
Gruppe4: Referenznummer
Gruppe5: Kundennummer
VVXXXXXXP> VV = ESR-Code, XXXXXX = Ordnungsnummer (inkl. vorlaufende Nullen), P = Prüfziffer
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php