matcht "... EAC ...", "... RFC ..." und "... AEI ..." (soweit OK)
es matcht aber auch "... III ...". genau diese variante möchte ich ausschließen.gefundene lösung: alle 3 möglichkeiten durchgehen und jeweils das i ausschließen
/\s(([A-Z]{2}[A-HJ-Z])|([A-Z][A-HJ-Z][A-Z])|([A-HJ-Z][A-Z]{2}))\s/lässt sich das auch eleganter machen? ich stelle mir etwas in der richtung vor, das äußerste pattern (\1) irgendwie mit einer bedingung zu belegen...
Schau doch mal in der PHP-Anleitung im in schönem Deutsch Reguläre Ausdrücke Funktionen benannten Kapitel auf der Seite mit der PCRE-Syntax nach (http://www.php.net/manual/de/reference.pcre.pattern.syntax.php). Fast am Ende findest Du den Absatz Conditional subpatterns, bedingte Muster. Mit diesen kannst Du etwas bauen, was als "falls nicht III, dann nehme drei Buchstaben" funktioniert.
Am Ende Deiner Studien sollte /\s(?(?!III)([A-Z]{3}))\s/ rauskommen. ?(...) zu Beginn enthält die zu prüfende Bedingung, ?!III darin ist ein Vorausgucker, der prüft, ob an dieser Stelle kein III folgt (das Gegenteil wäre ?=III, "folgt III?", die Beschreibung dazu steckt im Abschnitt Assertions). Daran schließt sich das Muster an, das bei erfüllter Bedingung für diese Textstelle benutzt wird, in diesem Fall das Dir bekannte [A-Z]{3}, in runden Klammern, um es einzeln auszufiltern.
Mit einem senkrechten Strich könnte man auch noch ein Muster anhängen, welches ausgeführt wird, falls die Bedingung nicht zutrifft, aber das ist hier nicht nötig.