|
|
|
| Помогите, плиз, выделить последние части адреса:
http://www.site.ru/salon/one/two
Выражение [a-zA-Z0-9]*[^/^\.\:] раскладывает адрес на все текстовые составляющие, а мне по сути надо только то, что после дот ру.
А выражение ^[a-zA-Z0-9]+$ дает только последний кусок (two).
Но в идеале хочется получить $0=salon, $1=one, $2=two (для rewriteRule). | |
|
|
|
|
|
|
|
для: DJ Paltus
(22.10.2008 в 10:43)
| | для мод реврайта?
самый простой вариант
([a-z]+)/([a-z]+)/([a-z]+)/?
|
или у вас может быть неограниченное кол-во параметров? | |
|
|
|
|
|
|
|
для: ddhvvn
(22.10.2008 в 11:49)
| | Неограниченного количества параметров, конечно, не будет; третий - и то про запас. Однако, проверяю Ваш регвыр в конструкторе (http://www.pcre.ru/eval/), и он не дает результата. Или реврайт иначе читает? | |
|
|
|
|
|
|
|
для: DJ Paltus
(22.10.2008 в 12:16)
| | Пример из книги Дж.Фридл "Регулярные выражения", посмотрите может поможет
Регулярное выражение для извлечения URL (mailto, http, https, ftp) из финансовых новостей<br />";
preg_match_all('%
\b
# Начало URL (префикс:// имя_хоста или просто имя хоста)
(
# допустимые префиксы - ftp://, http:// и https://
(ftp|https?)://[-\w]+(\.\w[-\w]*)+
|
# ... или попытаться найти имя хоста по уточненному подвыражению
(?i: [a-z0-9] (?: [-a-z0-9]*[a-z0-9])? \. )+ # Домены нижних уровней (поиск без учета регистра)
# Окончания .com и т.д. должны прописываться строчными буквами (поиск с учетом регистра)
(?-i: com\b
| edu\b
| biz\b
| gov\b
| in(?:t|fo)\b # .int или .info
| mil\b
| org\b
| [a-z][a-z]\b #двухбуквенные коды стран
)
)
# Разрешить необязательный номер порта
( : \d+ )?
# Остаток URL не является обязательным и начинается с / ...
(
/
# Эвристические правила, которые хорошо работают в нашем случае
[^;"\'<>()\[\]{}\s\x7F-\xFF]*
(?:
[..?]+ [^;"\'<>()\[\]{}\s\x7F-\xFF]+
)*
)?%x', 'http://www.site.ru/salon/one/two', $out);
|
С пятым "карманом" уже просто разобраться. | |
|
|
|
|
|
|
|
для: vitali
(22.10.2008 в 15:17)
| | Жуть какая.
вот только как всю эту штуку внушить mode_rewrite? | |
|
|
|
|
|
|
|
для: DJ Paltus
(22.10.2008 в 15:53)
| | ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ | |
|
|
|
|
|
|
|
для: BinLaden
(22.10.2008 в 20:34)
| | Работает, но проблема одна - параметров же может быть меньше. Попробовал (^([a-zA-Z0-9]+))*/?$", тоже не выходит. | |
|
|
|
|
|
|
|
для: DJ Paltus
(22.10.2008 в 10:43)
| | Я бы сделал так:
| |
|
|
|
|
|
|
|
для: OvEL
(22.10.2008 в 23:25)
| | В область видимости RewriteRule, насколько я помню, ни schema, ни хост не попадают, т.е. выражение Вы будете писать для "salon/one/two", а не для "http://www.site.ru/salon/one/two" | |
|
|
|
|
|
|
|
для: BinLaden
(22.10.2008 в 23:54)
| | В таком случае
Может же быть ситуация, когда заданы не все параметры, например http://sitename.ru/one/two | |
|
|
|
|
|
|
|
для: OvEL
(23.10.2008 в 01:28)
| | индеец ругается...
[Thu Oct 23 09:19:14 2008] [alert] [client 127.0.0.1] z:/home/raditsa/www/.htaccess: RewriteRule: cannot compile regular expression '^(?\\/([\\w\\d]+)\\/?)*$' | |
|
|
|
|
|
|
|
для: DJ Paltus
(23.10.2008 в 09:24)
| |
^([a-z]+)/([a-z]+)/?([a-z]+)?/?$
|
вот конкретно для Вас, если параметров два или три! | |
|
|
|