Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разбор адреса из строки браузера
 
 автор: DJ Paltus   (22.10.2008 в 10:43)   письмо автору
 
 

Помогите, плиз, выделить последние части адреса:

http://www.site.ru/salon/one/two

Выражение [a-zA-Z0-9]*[^/^\.\:] раскладывает адрес на все текстовые составляющие, а мне по сути надо только то, что после дот ру.

А выражение ^[a-zA-Z0-9]+$ дает только последний кусок (two).
Но в идеале хочется получить $0=salon, $1=one, $2=two (для rewriteRule).

  Ответить  
 
 автор: ddhvvn   (22.10.2008 в 11:49)   письмо автору
 
   для: DJ Paltus   (22.10.2008 в 10:43)
 

для мод реврайта?
самый простой вариант


([a-z]+)/([a-z]+)/([a-z]+)/?


или у вас может быть неограниченное кол-во параметров?

  Ответить  
 
 автор: DJ Paltus   (22.10.2008 в 12:16)   письмо автору
 
   для: ddhvvn   (22.10.2008 в 11:49)
 

Неограниченного количества параметров, конечно, не будет; третий - и то про запас. Однако, проверяю Ваш регвыр в конструкторе (http://www.pcre.ru/eval/), и он не дает результата. Или реврайт иначе читает?

  Ответить  
 
 автор: vitali   (22.10.2008 в 15:17)   письмо автору
 
   для: 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);


С пятым "карманом" уже просто разобраться.

  Ответить  
 
 автор: DJ Paltus   (22.10.2008 в 15:53)   письмо автору
 
   для: vitali   (22.10.2008 в 15:17)
 

Жуть какая.
вот только как всю эту штуку внушить mode_rewrite?

  Ответить  
 
 автор: BinLaden   (22.10.2008 в 20:34)   письмо автору
 
   для: DJ Paltus   (22.10.2008 в 15:53)
 

^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$

  Ответить  
 
 автор: DJ Paltus   (23.10.2008 в 09:36)   письмо автору
 
   для: BinLaden   (22.10.2008 в 20:34)
 

Работает, но проблема одна - параметров же может быть меньше. Попробовал (^([a-zA-Z0-9]+))*/?$", тоже не выходит.

  Ответить  
 
 автор: OvEL   (22.10.2008 в 23:25)   письмо автору
 
   для: DJ Paltus   (22.10.2008 в 10:43)
 

Я бы сделал так:
\.\w{2,4}(?\/(\w+)\/?)*

  Ответить  
 
 автор: BinLaden   (22.10.2008 в 23:54)   письмо автору
 
   для: OvEL   (22.10.2008 в 23:25)
 

В область видимости RewriteRule, насколько я помню, ни schema, ни хост не попадают, т.е. выражение Вы будете писать для "salon/one/two", а не для "http://www.site.ru/salon/one/two"

  Ответить  
 
 автор: OvEL   (23.10.2008 в 01:28)   письмо автору
 
   для: BinLaden   (22.10.2008 в 23:54)
 

В таком случае
^(?\/([\w\d]+)\/?)*$

Может же быть ситуация, когда заданы не все параметры, например http://sitename.ru/one/two

  Ответить  
 
 автор: DJ Paltus   (23.10.2008 в 09:24)   письмо автору
 
   для: 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]+)\\/?)*$'

  Ответить  
 
 автор: ddhvvn   (23.10.2008 в 10:41)   письмо автору
 
   для: DJ Paltus   (23.10.2008 в 09:24)
 

^([a-z]+)/([a-z]+)/?([a-z]+)?/?$


вот конкретно для Вас, если параметров два или три!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования