Я использую preg_replace
, чтобы поменять слова США с их британскими вариантами в HTML.
function makeUK(&$str){
$delta = [
'authorize' => 'authorise',
'center' => 'centre',
'theater' => 'theatre',
'capitalize' => 'capitalise',
...
];
$pattern = []; $replacement = [];
foreach ($delta as $k => $val) {
// match terms using word boundaries excluding "-" character
$pattern[] = '/\b(?<!\-)'.$k.'\b(?!-)/i';
$replacement[] = $val;
}
return preg_replace($pattern,$replacement,$str);
}
Это немного грубо, но подходит для моего случая использования.
У меня установлен флаг i
в моем шаблоне, чтобы соответствовать всем буквенным регистрам, однако это будет трансмутировать (например, «Центр» в «Центр»), что не идеально.
Я могу добавить дополнительные значения в массив $delta
, чтобы учесть прописные слова "Center" => "Centre"
, но это удвоит размер массива и не составит труда поддерживать.
Я изучил preg_replace_callback
, но у меня возникли проблемы с его реализацией для массивов значений, а не отдельных значений.
Есть ли способ сохранить регистр букв в совпадении при сохранении массива всех значений нижнего регистра?