Вы можете сопоставить заглавную букву с дополнительными строчными буквами, обозначающими имя элемента, заканчивающееся цифрами или [-+]
знаками, или оба, используя:
([A-Z][a-z]*)(\d*[-+]?)
RegEx live demo
PHP-код (см. Демонстрацию здесь ):
preg_match_all('~([A-Z][a-z]*)(\d*[-+]?)~', $str, $matches);
Вывод для предоставленного ввода:
Array
(
[0] => Array
(
[0] => K+
[1] => K
[2] => +
)
[1] => Array
(
[0] => Cr7+
[1] => Cr
[2] => 7+
)
[2] => Array
(
[0] => O2-
[1] => O
[2] => 2-
)
)