Вы можете использовать
if (preg_match('~(?: [A-Z]{2})+$~', $s, $match)) {
print_r(explode(" ", trim($match[0])));
}
Здесь (?: [A-Z]{2})+$
соответствует одной или нескольким последовательностям пробела, а затем двум заглавным буквам ASCII до конца строки, а затем explode(" ", trim($match[0]))
разделяет усеченное совпадение с пробел.
Или, если вы хотите сопоставить все вхождения одним вызовом регулярного выражения:
if (preg_match_all('~(?:\G(?!\A)|(?=(?:\s[A-Z]{2})+$))\s\K[A-Z]{2}~', $s, $matches)) {
print_r($matches[0]);
}
Здесь регулярное выражение соответствует:
(?:\G(?!\A)|(?=(?:\s[A-Z]{2})+$))
- конец предыдущего совпадения (\G(?!\A)
) или (|
) местоположение, за которым сразу следует одна или несколько последовательностей пробела, а затем две заглавные буквы ASCII до конца строки \s
- пробел \K
- оператор сброса соответствия [A-Z]{2}
- две заглавные буквы ASCII.
См. демонстрационную версию PHP 1030 *.