В PHP у меня есть строка $string и массив $acronyms (в форме «UK» => «United Kingdom»).
Теперь я хочу заменить все аббревиатуры в $string некоторыми HTML-тегами. Например, Hello UK
должно превратиться в Hello <acronym title="United Kingdom">UK</acronym></pre>
Я делаю это так:
foreach($acronyms as $acronym => $tooltip){
$string = preg_replace('/'.$acronym.'/i', ''.$acronym.'', $string);
}
Проблема в следующем: допустим, у меня есть текст Hello UK
и есть массив для замены «Великобритания» на «Великобритания» и «Королевство» на «RandomWord». Затем текст заменится на Hello <acronym title="United <acronym title="RandomWord">Kingdom</acronym>">UK</acronym>
, что, очевидно, является хаосом.
Итак, вопрос: Как заставить мой preg_replace искать только те слова, которые НЕ находятся внутри тега <acronym>
? (ни в атрибуте title, ни в самом теге)
Изменить: вторая попытка в соответствии с ответом (потому что я не могу вставить код в ответ). Все та же проблема, текст внутри аббревиатуры заменяется второй раз... foreach($acronyms as $acronym => $tooltip){
$acronyms[$acronym] = '<acronym title="'.$tooltip.'">'.$acronym.'</acronym>';
}
$string = str_ireplace(array_keys($acronyms), array_values($acronyms), $string);