Я хочу заменить все вхождения в строке, начинающиеся с @. Если я использую str_replace, все работает нормально, пока имена пользователей не станут похожими. Мне нужно что-то, чтобы полностью заменить точные уникальные слова, не затрагивая другие похожие слова. Пример @johnny и @johnnys будет проблематичным c. Может быть, может помочь регулярное выражение?
function myMentions($str){
$str = "Hello @johnny, how is @johnnys doing?"; //let's say this is our param
$regex = "~(@\w+)~"; //my regex to extract all words beginning with @
if(preg_match_all($regex, $str, $matches, PREG_PATTERN_ORDER)){
foreach($matches[1] as $matches){ //iterate over match results
$link = "<a href='www.google.com'>$matches</a>"; //wrap my matches in links
$str = str_replace($matches,$link,$str); //replace matches with links
}
}
return $str;
}
Вывод должен быть: Hello <a href=''>@johnny</a>, how is <a href=''>@johnnys</a> doing?
Вместо этого я получаю: Hello <a href=''>@johnny</a>, how is <a href=''>@johnny</a> s doing?
(ПРИМЕЧАНИЕ: дополнительные "s" на @johnnys не переносятся )
Он не распознает, что @johnny и @johnnys - это два разных слова, поэтому str_relace оба слова в одном go. В основном функция берет одно слово и заменяет все похожие слова сразу.