Ausdrucks, der mit AB anfängt und dann ein weiteres Zeichen (Buchstabe oder Ziffer) hat und anschließend eine oder beliebig viele Ziffern bis zu einem Leerzeichen enthält.
Aha. Das ist schon sehr viel genauer als mir bisher bekannt war:
<?php
$pattern[] = '^.*AB[A-Z0-9][0-9]+ (.*) ([0-9]+) ([0-9]+) (.*) ([0-9.,]*)$';
$pattern[] = '^.*AB[A-Z0-9][0-9]+ (.*) ([0-9]+) (.*) ([0-9.,]*)$';
$pattern = '/' . implode('|', $pattern ) . '/';
$rows = file('/tmp/data.txt');
foreach ( $rows as $row ) {
$row = trim( $row );
preg_match( $pattern, $row, $arr );
$arrE=[];
foreach($arr as $item) {
if ( $item ) { $arrE[] = $item; }
}
if ( 5 == count( $arrE ) ) {
$arrE[5] = $arrE[4];
$arrE[4] = $arrE[3];
$arrE[3] = $arrE[2];
$arrE[2] = false;
}
print_r( $arrE );
}
Ausgabe nach Test mit Deinen Daten:
Array
(
[0] => AB0006777 Lore Ipsum 25 ABC 3,72
[1] => Lore Ipsum
[2] =>
[3] => 25
[4] => ABC
[5] => 3,72
)
Array
(
[0] => AB09899 AB00067127 At vero, eos et 2 1 XYZ 13,11
[1] => At vero, eos et
[2] => 2
[3] => 1
[4] => XYZ
[5] => 13,11
)
Array
(
[0] => AB0007711 CD0TZUUZ AB899979 At vero eos et 10 100 XYZ 1.223,50
[1] => At vero eos et
[2] => 10
[3] => 100
[4] => XYZ
[5] => 1.223,50
)