В вашей строке нет прописных символов, но вы можете использовать границу слова \b
и положительный прогноз (?=
, чтобы утверждать цифру, и при сопоставлении убедитесь, что совпадает хотя бы один символ a-zA-Z.
(или наоборот, в поисках символа a-z и совпадения хотя бы с 1 цифрой)
\b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*\b
regex demo
Используя флаг без учета регистра, ваш код может выглядеть следующим образом:
$subject = "foo ac64fc bar 4544";
preg_match('/\b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*\b/i', $subject, $matches);
print_r($matches[0]); // ac64fc