<?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 г. никто об этом не знал. и т.д. и т.п');
Я охотник. Живу в лесу.И мне комфортно и т.п
См. тут. Я читал и др. произведения. В 2003 г. никто об этом не знал. И т.д. и т.п
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Я охотник. Живу в лесу.И мне комфортно и т.п
См. тут. Я читал и др. произведения. В 2003 г. никто об этом не знал. И т.д. и т.п