@DreHows

Как правильно составить регулярное выражение для изменения урл?

Доброго времени суток:
вопрос: есть код html страницы, записанный в переменную, в котором имеются ссылки.
что нужно сделать: нужно найти все ссылки вида "/prod-3d-systems-cocojet-id229" и превратить их в "/goods/prod-3d-systems-cocojet-id229". Главное условие: замена должна происходить только там, где в конце есть "-id" и какое-то количество чисел, то есть если ссылка имеет вид "/prod-3d-systems-cocojet", ничего менять не надо.
Как это можно реализовать на php?
Бьюсь над задачей второй день, решение найти не удается, вынужден просить помощи =(
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега PHP
Добрый день.
Попробуйте начать со следующего кода
$str = "/prod-3d-systems-cocojet";
$pattern = "#id\d+$#";
if(preg_match($pattern, $str)){
  $str = '/goods' . $str;
}
echo $str;
Ответ написан
gromdron
@gromdron
Работаю с Bitrix24
Код:

$arData = [
	'/prod-3d-systems-cocojet',
	'/prod-3d-systems-cocojet-id23',
	'/prod-3d-systems-cocojet-idi',
	'prod-3d-systems-cocojet',
	'prod-3d-systems-cocojet-id332',
	'/prod-3d-systems-cocojet-id343',
];

foreach ($arData as $text)
{
	$newText = preg_replace('#/([a-z0-9_-]+\-id[0-9]+)#', '/goods/$1', $text);
	var_dump([$text,$newText]);
}


Результат на экране: (первый элемент в массиве исходный, второй - что получится в итоге)

array(2) {
  [0]=>
  string(24) "/prod-3d-systems-cocojet"
  [1]=>
  string(24) "/prod-3d-systems-cocojet"
}
array(2) {
  [0]=>
  string(29) "/prod-3d-systems-cocojet-id23"
  [1]=>
  string(35) "/goods/prod-3d-systems-cocojet-id23"
}
array(2) {
  [0]=>
  string(28) "/prod-3d-systems-cocojet-idi"
  [1]=>
  string(28) "/prod-3d-systems-cocojet-idi"
}
array(2) {
  [0]=>
  string(23) "prod-3d-systems-cocojet"
  [1]=>
  string(23) "prod-3d-systems-cocojet"
}
array(2) {
  [0]=>
  string(29) "prod-3d-systems-cocojet-id332"
  [1]=>
  string(29) "prod-3d-systems-cocojet-id332"
}
array(2) {
  [0]=>
  string(30) "/prod-3d-systems-cocojet-id343"
  [1]=>
  string(36) "/goods/prod-3d-systems-cocojet-id343"
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы