<?php
function upper_letter($text){
$exp = ['т.д','т.п','др','г','чел','пр', 'см'];
$pattern = '/\b(?i:' . implode("|", array_map(function($i) { return preg_quote(trim($i), "/"); }, $exp)) . ')\b\.?(*SKIP)(*FAIL)|\.\s*\p{Ll}/u'; // добавляем модификатор u, чтобы регулярка работала с многобайтными кодировками (utf-8, utf-16)
echo preg_replace_callback(
$pattern,
function($m) { // на вход поступает каждое из найденных соответствий
return mb_strtoupper($m[0]); // используем mb_ функцию, так как она работает с многобайтными кодировками
}, $text);
}
upper_letter('Я охотник. живу в лесу.и мне комфортно и т.п'); echo PHP_EOL;
upper_letter('См. тут. я читал и др. произведения. в 2003 г. никто об этом не знал. и т.д. и т.п');