Я создаю приложение php для форматирования файлов. Поэтому мне нужно применить процесс поиска-замены при сохранении дела.
Например, мне нужно заменить «сотрудников» на «транспортные средства».
$file_content = "Employees are employees_category MyEmployees kitEMPLOYEESMATCH";
$f = 'employees';
$r = 'vehicles';
echo str_ireplace($f, $r, $file_content);
Текущий выход:
vehicles are vehicles_category Myvehicles kitvehiclesMATCH
Желаемый результат:
Vehicles are vehicles_category MyVehicles kitVEHICLESMATCH






Вы можете использовать что-то подобное, заменив для каждого случая отдельно:
<?php
$file_content = "Employees are employees_category MyEmployees kitEMPLOYEESMATCH";
$f = 'employees';
$r = 'vehicles';
$res = str_replace($f, $r, $file_content); // replace for lower case
$res = str_replace(strtoupper($f), strtoupper($r), $res); // replace for upper case
$res = str_replace(ucwords($f), ucwords($r), $res); // replace for proper case (capital in first letter of word)
echo $res
?>
Хотя ответ SJ11 привлекателен своей краткостью, он склонен к непреднамеренным заменам уже замененных подстрок, хотя это невозможно с образцами данных OP.
Чтобы гарантировать, что замены не будут заменены, вы должны сделать только один проход по входной строке.
Для удобства я включу preg_quote(), чтобы шаблон не нарушался, когда значение $r содержит символы со специальным значением в регулярном выражении.
Код: (Демо ) ( Демо PHP7.4)
$file_content = "Employees are employees_category MyEmployees kitEMPLOYEESMATCH";
$f = 'employees';
$r = 'vehicles';
$pattern = '~('
. implode(
')|(',
[
preg_quote($f, '~'),
preg_quote(ucfirst($f), '~'),
preg_quote(strtoupper($f), '~')
]
) . ')~';
$lookup = [
1 => $r,
2 => ucfirst($r),
3 => strtoupper($r)
];
var_export(
preg_replace_callback(
$pattern,
function($m) use ($lookup) {
return $lookup[count($m) - 1];
},
$file_content
)
);
Вывод: (одинарные кавычки взяты из var_export())
'Vehicles are vehicles_category MyVehicles kitVEHICLESMATCH'