DizeL
Новичок
Регулярные выражения. Спец. символ ИЛИ.
Здравствуйте все.
Проблема в использовании регулярных выражений.
Делаю ЧПУ для нашей КМС.
Победил удачно .htaccess, там надо было правила для изображений, КСС и прочих урлов прописать.
Всё остальное идёт прямо в рут-индекс, который производит уже дишифровку и вызов нужных страниц.
Задача следующая:
При помощи регулярных выражений переделать все входящие запросы из:
- test.ru/test1/test2/test2/test4.html
- test.ru/test2/test2/test4.html
- test.ru/test2/test4.html
в test.ru/test4.html
Написал след. правило:
Теперь при входящей строке ... мы получаем...:
string(37) "/production/press/ps1000/service.html", string(13) "/service.html"
но при:
string(31) "/production/press/contacts.html" string(5) ".html"
и т.д.
Т.е. если колв-о вирутальних папок <3, то не работает выражение.
Было у меня предположение, что не срабатывает тройное условия.
Попробовал так:
Только с 2-мя условиями - всё равно не работает.
Кто у нас гуру в выражениях, помогите найти ошибку.
И ещё, попутный вопрос:
читал, но не особо понял, когда необходимо ставить в начеле строки ^ и в конце строки $? В учебнике написано было, что всегда, что это означает начало и конец строки поиска.
Однако на PHP http://www.php.net/manual/ru/function.preg-replace.php они не используются, и если я ставлю их в своём выражении, то вообще ничего не работает...
Кто-то может доступно объяснить их назначение?
Заранее спасибо.
Буду очень признателен за помощь.
Всем успехов в работе...
Здравствуйте все.
Проблема в использовании регулярных выражений.
Делаю ЧПУ для нашей КМС.
Победил удачно .htaccess, там надо было правила для изображений, КСС и прочих урлов прописать.
Всё остальное идёт прямо в рут-индекс, который производит уже дишифровку и вызов нужных страниц.
Задача следующая:
При помощи регулярных выражений переделать все входящие запросы из:
- test.ru/test1/test2/test2/test4.html
- test.ru/test2/test2/test4.html
- test.ru/test2/test4.html
в test.ru/test4.html
Написал след. правило:
PHP:
$param=preg_replace("`(?:/[\w\d]*/[\w\d]*/[\w\d]*)|(?:/[\w\d]*/[\w\d]*)|(?:/[\w\d]*)/([\w\d]*)`","\\1", $param);
string(37) "/production/press/ps1000/service.html", string(13) "/service.html"
но при:
string(31) "/production/press/contacts.html" string(5) ".html"
и т.д.
Т.е. если колв-о вирутальних папок <3, то не работает выражение.
Было у меня предположение, что не срабатывает тройное условия.
Попробовал так:
PHP:
$param=preg_replace("`(?:/[\w\d]*/[\w\d]*/[\w\d]*)|(?:/[\w\d]*/[\w\d]*)/([\w\d]*)`","\\1", $param);
Кто у нас гуру в выражениях, помогите найти ошибку.
И ещё, попутный вопрос:
читал, но не особо понял, когда необходимо ставить в начеле строки ^ и в конце строки $? В учебнике написано было, что всегда, что это означает начало и конец строки поиска.
Однако на PHP http://www.php.net/manual/ru/function.preg-replace.php они не используются, и если я ставлю их в своём выражении, то вообще ничего не работает...
Кто-то может доступно объяснить их назначение?
Заранее спасибо.
Буду очень признателен за помощь.
Всем успехов в работе...