Я пытаюсь заменить строку из исходного текста. ( zinc
--> zn
)
Пример: 'zinc zinc zinc zinc3 !zinc zincmatic #zinc zinc9 Zinc @zinc@'
Хочу: 'zn zn zn zinc3 !zn zincmatic #zinc zinc9 zn @zinc@'
Попытка str_ireplace:
$text = 'zinc zinc zinc zinc3 !zinc zincmatic #zinc zinc9 Zinc @zinc@';
$word = 'zinc';
$attr = 'zn';
// cant str_ireplace now as zincmatic will turn into znmatic and #zinc will turn into #zn
$text = ' '.$text.' ';
$word = ' '.$zinc.' ';
// will try now
$result = str_ireplace($word, $attr, $word);
echo trim($result);
Печатает zn zinc zn zinc3 !zinc zincmatic #zinc zinc9 zn @zinc@
. Все еще есть проблемы, так как !zinc
и второй zinc
остаются из-за нехватки места..
Попытка preg_replace:
$text = 'zinc zinc zinc zinc3 !zinc zincmatic #zinc zinc9 zinc';
$word = 'zinc';
$attr = 'zn';
$result = preg_replace("/\b($word)\b/i",$attr,$text);
echo $result;
Отпечатки zn zn zn zinc3 !zn zincmatic #zn zinc9 zn @zn@
почти получили то, что я хотел: кажется, что цинк превратится в zn
, даже если рядом есть какой-то специальный символ, например, !zinc
или #zinc
, но не если есть число zinc9
или текст, например zincmatic
Я просто хочу поместить здесь правило, чтобы #zinc
сохраняло #zinc
, @zinc@
сохраняло @zinc@
, а !zinc
превращалось в !zn
.
Есть ли способ добавить некоторые исключения для специальных символов, если цинк находится рядом с одним из них (например: #zinc
, zinc#
, zinc@
, @zinc
)
Символы, которые я хочу использовать, это #
, &
, @
.
Спасибо!