Не могу понять, почему регулярка не срабатывает для последней строки?
[^a-zA-Zа-яА-Я]уфа([^a-zA-Zа-яА-Я]|$)
Manufacturing
asdasdуфаавпвап true
!!! ...уфа... !!!!! true
sdf уфа true
уфа false
Вот здесь можно потыкать интерактивный вариант: https://regex101.com/r/9fNMkj/1
Используйте последовательность символов \b, обозначающих границу слова:
$str = 'Manufacturing
asdasdуфаавпвап
!!! ...уфа... !!!!!
sdf уфа
уфа';
$patt = '~\bуфа\b~u';
preg_match_all($patt, $str, $arr);
var_dump($arr);
Ты уже проверяешь на конец строки, но не проверяшь на начало. Надо так:
(^|[^a-zA-Zа-яА-Я])уфа([^a-zA-Zа-яА-Я]|$)
Но вообще подозреваю, что правильнее было бы использовать \b:
\bуфа\b
Вот так вот надо:
(^|\s*|[^a-zA-Zа-яА-Я0-9ёЁ])уфа([^a-zA-Zа-яА-Я0-9ёЁ]|\s+|$)
\s - пробельный символ
^ - начало строки
$ - конец строки
ёЁ - не забываем любимую букву
Сборка персонального компьютера от Artline: умный выбор для современных пользователей