Hallo Pit,
ich sehe das nicht so negativ wie Jörg (ursus fastixiabundo :) ).
Wenn Du die einleitenden Codes separat haben willst, kannst Du das so machen:
/^(?<startwort>AB[\w\d]+)\s+(?<startplus>(AB[\w\d]+\s+)+)(?<vorwort>.*)\s+(?<zahl>\d+)\s+(?<wort>\w+)\s+(?<betrag>[\d.,]+)\s*$/
Ich habe mal deine Aussage eingebaut, dass die Codewörter am Zeilenanfang immer mit AB starten. Und ich habe auf \w und \d umgestellt, statt [A-Z] und [0-9]. Ist vermutlich besser so. Es matcht dann auf jeden Fall auch die Kleinbuchstaben, und je nach locale-einstellungen auf deinem Server auch Akzentzeichen (áàâä und Familie)
Zerlegt in die einzelnen Teile:
^ Zeilenstart
(?<startwort>AB[\w\d]+) Erstes AB238423 Wort -> $matches['startwort']
\s+ Leerraum
(?<startplus>(AB[\w\d]+\s+)+) 1-N AB293482309 Worte -> $matches['startplus']
(?<vorwort>.*) Freitext -> $matches['vorwort']
\s+ Leerraum
(?<zahl>\d+) Int-vor dem letzten Wort -> $matches['zahl']
\s+ Leerraum
(?<wort>\w+) letztes Wort -> $matches['wort']
\s+ Leerraum
(?<betrag>[\d.,]+) Betrag -> $matches['betrag']
\s* optionaler Leerraum
$ Zeilenende
Für mich ist bei solchen Aufgaben die Seite regex101.com sehr hilfreich. Da bekommst Du erklärt, was die Regex tut, und kannst sie ausprobieren.
Rolf
--
sumpsi - posui - clusi
sumpsi - posui - clusi