Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Обрезка урлов (URL)

#1 T(h)rasher

T(h)rasher
  • Пользователь
  • 22 сообщений
  • Репутация: 1
0

Отправлено 16 Май 2014 - 19:24

Всем добрый вечер. Мне нужно вырезать из урла среднюю часть, т.е. есть, например, такой урл: www.mysite.ru/hardware/Intel/processors/new/u56723.jpg. А в итоге нужно получить следующий урл: www.mysite.ru/u56723.jpg, т.е. нужно вырезать все подкаталоги из средней части урла до самого файла. Подозреваю, что это делается с помощью регулярных выражений, но я пока с ними толком не знаком. Подскажите как можно решить задачу. Заранее спасибо за помощь.


 

 

Сообщение отредактировал T(h)rasher: 16 Май 2014 - 19:25

  • 0

#2 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 16 Май 2014 - 20:54

T(h)rasher, я думаю функция preg-replace вам в помощь


Сообщение отредактировал Ixman: 16 Май 2014 - 20:55

  • 0

#3 T(h)rasher

T(h)rasher
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 1

Отправлено 16 Май 2014 - 21:05

Спасибо за ссылку. Да, судя по всему, надо воспользоваться этой функцией, но я не знаю как само регулярное выражение записать - для удаления всех подкаталогов.


  • 0

#4 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 16 Май 2014 - 22:32

Вечером голова уже не варит, чёт не могу сообразить как их вырезать.

Сообщение отредактировал Ixman: 16 Май 2014 - 22:32

  • 0

#5 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 17 Май 2014 - 20:44

Добрый вечер.

Например так возможно:

$str = "www.mysite.ru/hardware/Intel/processors/new/u56723.jpg";
$domen = "www.mysite.ru/";
$pattern = "#.*/(.+)$#";

echo preg_replace($pattern, $domen."$1", $str); // результат: www.mysite.ru/u56723.jpg

  • 0


#6 sakhseo

sakhseo
  • Пользователь
  • 13 сообщений
  • Репутация: 1

Отправлено 17 Май 2014 - 22:16

$str = "www.mysite.ru/hardware/Intel/processors/new/u56723.jpg";
echo preg_replace("#^([^/]+)/.*/([^/]+)$#", "$1/$2", $str);

Или вот так. По ситуации надо)))

$str = "бла бла бла dfhhfdhd www.mysite.ru/hardware/Intel/processors/new/u56723.jpg бла бла бла";
echo preg_replace("#([^/\s]+)/.*/([^/\s]+)#", "$1/$2", $str); // бла бла бла dfhhfdhd www.mysite.ru/u56723.jpg бла бла бла

Сообщение отредактировал sakhseo: 17 Май 2014 - 22:39

  • 1

#7 T(h)rasher

T(h)rasher
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 1

Отправлено 17 Май 2014 - 22:22

Спасибо большое за помощь, надо будет разобраться что есть что в шаблоне. Буду тестить)
Кстати, кто-нибудь знает какой-нибудь ресурс (курс, книгу или просто сайт), где было бы в доступной форме объяснено как работать с регулярными выражениями, составлять их и т.д.? Буду благодарен за ссылки. Спасибо. 


Сообщение отредактировал T(h)rasher: 17 Май 2014 - 22:37

  • 0

#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 18 Май 2014 - 07:26

Начать можно с первой книги (она попроще), после приступить ко второй книге, этого будет достаточно:

1. Бен Форта. Регулярные выражения. 10 минут на урок.

2. Дж. Фридл. Регулярные выражения.

Обе книги можно без проблем найти и скачать.


  • 2


#9 T(h)rasher

T(h)rasher
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 1

Отправлено 19 Май 2014 - 21:04

Со строкой для паттерна в примере, приведенном matroskin8, разобрался. Не пойму, что означает в этом же примере "$1" (в примере sakhseo это "$1/$2"), и зачем делать слияние строки $domen и "$1". Подскажите пожалуйста


  • 0

#10 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 20 Май 2014 - 09:46


Не пойму, что означает в этом же примере "$1" (в примере sakhseo это "$1/$2")

В регулярных выражениях часть шаблона, заключенная в скобки (их называют "группирующими", "запоминающими" в зависимости от цели), запоминается, иногда говорят - "кладется в карман". Вот эти вот "карманы" нумеруются, это как пронумерованные переменные. В моем примере использованы круглые скобки 1 раз, соответственно, мы положили часть строки (все, что идет до первого слеша от конца строки) в карман №1.

В примере sakhseo запоминающие скобки использованы дважды: в карман №1 попадет доменное имя, а в карман №2 - все, что идет после последнего слеша до слеша или пробела.

Далее во втором параметре функции preg_replace() мы можем обратиться к содержимому карманов и что-то сделать с ним или же просто вывести. Только в данном случае вместо знака № используется знак $.

В моем примере строка домена склеивается с содержимым переменной 1 (кармана №1), в примере sakhseo склеивается содержимое переменных $1 и $2.


  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru