Versionen dieses Beitrags

Nach Deinen Ergänzungern verbesserte Lösung

ursus contionabundo
  • Nochmal Regex gesucht
  • Nach Deinen Ergänzungern verbesserte Lösung
  • > 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](https://forum.selfhtml.org/self/2019/feb/7/nochmal-regex-gesucht/1742193#m1742193):
  • ~~~php
  • <?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
  • )
  • ~~~