Думаю многим приходилось сталкиваться с древовидной структурой каталогов. (http://сайт.ру/раздел1/раздел2/раздел3/…/разделN/). Все в общем то по стандарту. Но проблема возникает, когда к этому пути я хочу добавить параметр, отвечающий за номер страницы. То есть, скажем, вот так / раздел1/раздел2/раздел3/…/разделN/страница_1/. Мне надо чтобы с помощью регулярных выражений я получал полный путь (/раздел1/раздел2/раздел3/…/разделN/) и номер текущей страницы (1). Сейчас я использую вот такую конструкцию, она вполне справляется с поставленной задачей. /(.*)/(страница_([0-9]))/* На выходе получается массив с элементами Group 1: раздел1/раздел2/раздел3/…/разделN Group 2: страница_2 Group 3: 2 Но возможны варианты, когда параметр с номером страницы отсутствует. То есть, вот так (/раздел1/раздел2/раздел3/…/разделN/). Тогда приведенный мой пример попросту не работает. Как построить эффективное регулярное выражение, учитывающее эту особенность?
раздел1/раздел2/раздел3/…/разделN/(страница_1/)? ? - ноль или 1 совпадние а вообще тут еще можно explode(), если не mod rewrite канеш...
Andrey_Sergeev господи, надеюсь у вас mod_rewrite... ну вообщем-то, для таких дел делается 2 регулярных выражения Код (Text): RewriteRule ^(.+)\/page-([0-9]+)\/$ index.php?dir=$1&page=$2 [L] RewriteRule ^(.+)\/$ index.php?dir=$1&page=0 [L]
А есть варианты при которых эти 2 выражения соединены в одно? Дело в том что мне нужно, чтобы одним регулярным выражением обрабатывались 2 случая. Эта обрабтка испольуется не в mod_rewrite. Он тут совершенноне причем.
А если php сломалсо? я бы никогда не променял mod_rewrite на mkdir В виде чего нужно получить результат? вообще preg_match, preg_match_all, preg_replace ...
Код (Text): master(root):/usr/www/go.trafficshop.com/bin#>ps ax | egrep "(php|nginx)" 3199 ?? I 0:14.94 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 3319 ?? I 0:15.87 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 4293 ?? I 0:15.34 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 4429 ?? I 0:14.72 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 5519 ?? I 0:14.92 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 24752 ?? Is 0:00.00 nginx: master process /usr/local/sbin/nginx 24753 ?? S 0:07.35 nginx: worker process (nginx) 64557 ?? Is 0:00.19 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 86974 ?? I 0:13.91 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 86975 ?? I 0:14.70 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 89516 ?? I 0:14.30 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 89650 ?? I 0:14.61 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 95761 ?? I 0:16.25 /usr/local/bin/php-cgi -b /tmp/.fastcgi.www/socket 46180 p0 R+ 0:00.00 egrep (php|nginx)
Результаты нужны в виде массива Array ( [0] => /sub1/sub2 - путь [1] => 2 - номер страницы (если она присутствует в строке URL) ) функция обработки может быть любой. к примеру preg_match_all
вот в моём понимании - никак, а в понимании некоторых, mkdir весело клепает папочки и получает ЧПУ Слу, ты же понимаешь о чём я, чё меня мучиишь =\
Еще раз возврашаясь к моей проблеме. http://site.ru/sub1/sub2/.../sub3/ или http://site.ru/sub1/sub2/.../sub3/page_3/ Насколько я понимаю все дело в конструкции (.*) , которая выбирает все символы из строки. И в том числе символ / . Можно ли ее видоизменить, чтобы внести ограничения на жестко заданное слово (к примеру page_) . А далее уже применять выражения типа (page_[0-9])? Или все же существует метод получить массив из 2-х элементов? подскажите кто знает, буду очень признателен