Например, я получаю данные через $_POST в виде:
$text = "(ref|https://stackoverflow.com|Текст) лучший сайт в мире";
Мне нужно, чтобы произошла замена на:
<a href="https://stackoverflow.com">Текст</a> лучший сайт в мире
Пробовал разное, что-то типа str_replace и т.д., но не получается. Тк помимо этой строки я получаю еще текст. А заменять нужно именно эту строку + чтобы текст "лучший сайт в мире" оставался не тронутым. Есть решение?
$text = "(ref|https://stackoverflow.com|Текст) лучший сайт в мире";
$pattern = '/\((ref)\|(.*)\|(.*)\)/i';
$replacement = '<a href="$2">$3</a>';
echo preg_replace($pattern, $replacement, $text);
Выведет: <a href="https://stackoverflow.com">Текст</a> лучший сайт в мире
Разбирать структуру с выраженным синтаксисом нужно с помощью лексера/парсера.
Особенно если это не единичный случай.
Но всё же:
function translate($input){
if(preg_match("_\(ref\|((?:https?|ftp)://(?:-\.)?(?:[^\s/?\.#-]+\.?)+(?:/[^\s]*)?)\|([^\)]+)\)(.+)?_iS", $input, $matches) === false) return false;
return "<a href='" . $matches[1] . "'>" . $matches[2] . "</a>" . $matches[3];
}
$text = "(ref|https://stackoverflow.com|Текст) - лучший сайт в мире";
var_dump(translate($text)); // string(86) "<a href='https://stackoverflow.com'>Текст</a> - лучший сайт в мире"
Repl.it
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости