Я создаю класс «get all site links» в моем приложении. Функциональные параметры являются сегментами и возвращаются в качестве URL-адреса веб-сайта.Как заменить пользовательские строки на область Regex
Моих regexs, которые хранятся в базе данных, как этот blog/([a-z]+)(/[a-z0-9.-]+)?
Я хочу, чтобы заменить regexs с моими «совпадающими» данными (сегментами).
Сегменты являются строками или массивами, могут быть оба. Но предпочитаемое с использованием в качестве матрицы
Пример 1:
Regex: blog/([a-z]+)(/[a-z0-9.-]+)?
Сегменты: news
, new-software-released
Результат: blog/news/new-software-released
Пример 2:
Regex: blog/([a-z]+)(/[a-z0-9.-]+)?
Сегменты: news
Результат: blog/news
Пример 3:
Regex: user(/[a-z0-9.-]+)?
Сегменты: johndoe
Результат: user/johndoe
Пробовал массив preg_replace, но я не мог понять:
function get_url($segments){
$regex = "blog/([a-z]+)(/[a-z0-9.-]+)?"
$replacements = explode('|', trim($segments));
$count = 0;
return preg_replace('/'.$regex.'/', '$replacements[$count++]', $regex);
}
echo get_url('news|new-software-released');
Похоже, вам нужно заменить '|' на '/' в параметре и _concatenate_ с помощью 'blog /'? – devnull
Почему вы используете '$ regex' как регулярное выражение и предмет замены? – Barmar
Как вы можете сделать пример 3, когда у вас есть 'blog /' жестко закодированный в вашей функции? Он никогда не вернет 'user /'. – Barmar