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


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

Не понятно регулярное выражение

#1 Banderas

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

Отправлено 01 Март 2011 - 18:31

Не могу разобрать что автор хотел сделать используя вот этот код
function regexpEscape($str)
{
return preg_quote($str, '/');
}

$mPageUrl = preg_replace (array('/^\//', '/\/?\?'.RegexpEscape($_SERVER['QUERY_STRING']).'$/'), array('',''), $mRequestUri ).'/';


Обьясните плис, кто понимает...((

 

 

  • 0


#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Март 2011 - 21:27

Banderas, всё очень просто :)
Функция regexpEscape() - экранирует символы \\ + * ? [ ^ ] $ ( ) { } = ! < > | :, а так же экранирует символ / (Почему так, можно почитать в описании функции preg_quote) и возвращает экранированную строку.

Функция preg_repalce() возвращает переданную строку с заменами найденных вхождений (если они нашлись)

Теперь по описанию регулярки и кода

1) функцией preg_replace мы заменяем ( а в данном примере удаляем) в переменной $mRequestUri
  • '/^\//' - символ '/' только в начале строки => удаляем
  • '/\/?\?'.RegexpEscape($_SERVER['QUERY_STRING']).'$/' - строку оканчивающуюся на '/?[строка запроса]' или '?[строка запроса]' => удаляем (т.е. обрезаем концовку - передаваемые GET-параметры или так называемую строку запроса)
2) Добавляем в конце слеш

Моё видение кода
Тупо из URL запроса мы выцепляем URL страницы, к которой идет запрос, преобразовывая -> удаляется слеш из начала и строка запроса из конца.
Например:
Было
  • /path/catalog/subcatalog/?param1=value&param2=value...
  • /path/catalog/subcatalog/file.php?param1=value&param2=value...
  • httр://site.ru/path_to_file/?param1=value&param2=value...
  • httр://site.ru/path_to_file/file.php?param1=value&param2=value...
Стало после preg_replace
  • path/catalog/subcatalog
  • path/catalog/subcatalog/file.php
  • httр://site.ru/path_to_file
  • httр://site.ru/path_to_file/file.php
Записалось в $mPageUrl
  • path/catalog/subcatalog/
  • path/catalog/subcatalog/file.php/
  • httр://site.ru/path_to_file/
  • httр://site.ru/path_to_file/file.php/

Не понимаю, зачем нужен подобный код если есть функции basename (Возвращает имя файла из указанного пути), dirname (Возвращает имя каталога из указанного пути) или pathinfo (Возвращает информацию о пути к файлу)
  • 0


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