Надеюсь, я правильно понял ваш вопрос.Эти регулярные выражения соответствуют всем словам, в которых есть как минимум 2 заглавные буквы или как минимум 1 буква + 1 номер (например, HEllo, HellO, Hello1, hello2 и т. Д.).Он использует пробел в качестве разделителя, поэтому он может потерпеть неудачу с пунктуацией, включая запятые, точки и другие элементы в совпадениях.
$text = 'Text';
preg_match_all('#(?<= )([^ ]*\p{Lu}[^ ]*\p{Lu}[^ ]*(?= )|[^ ]*\p{L}[^ ]*\p{N}[^ ]*|[^ ]*\p{N}[^ ]*\p{L}[^ ]*)(?= )#u', $text, $matches);
print_r($matches[0]);
(Пояснение: он соответствует каждому слову, которому предшествует, а затем следует пробел (ноне включайте их в совпадение), в котором есть то, что не является пробелом, повторенным 0, 1 или более раз, заглавной буквой, снова непробельным повторением 0, 1 или более раз, снова заглавной буквой и снова чем-то, чтоне пробел, или то же самое, но вместо заглавных букв у вас есть буква и цифра, или цифра и буква)
Для того, чтобы использовать это вам нужно PHP > 5.1.0
.Преимущество состоит в том, что он соответствует всем символам Юникода, которые считаются буквами или цифрами, а не только ASCII.Если вам это не нужно или у вас есть дополнительная версия PHP, вы можете использовать версию ASCII:
$text = 'Text';
preg_match_all('#(?<= )([^ ]*[A-Z][^ ]*[A-Z][^ ]*(?= )|[^ ]*[A-Za-z][^ ]*[0-9][^ ]*|[^ ]*[0-9][^ ]*[A-Za-z][^ ]*)(?= )#', $text, $matches);
print_r($matches[0]);