Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярка разбиения страницы, Подвис совсем 
:(
    Опции темы
capitan
Дата 25.8.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 1
Всего: 13



Есть варианты страниц:
index
index.html
index2.html

Пишу регулярку: 
Код

        $pattern = '/^(.*)([0-9]{0,3})?\.?([a-zA-z]+)?$/Ui'; 
        preg_match($pattern, $url, $modules); 
        var_dump($modules);


получаю результаты:
Код

array (
  0 => 'index',
  1 => '',
  2 => '',
  3 => 'index',
)

array (
  0 => 'index.html',
  1 => 'index',
  2 => '',
  3 => 'html',
)

array (
  0 => 'index2.html',
  1 => 'index',
  2 => '2',
  3 => 'html',
)


Не пойму, почему в 1 варианте результат стоит в 3 ключе, а не в 1-м???? Как победить?
PM MAIL WWW ICQ   Вверх
enoff
Дата 25.8.2010, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 1
Всего: 13



Код

/^(.*)([0-9]{0,3})(?:\.([a-z]*))?$/Ui

PM MAIL ICQ Skype GTalk   Вверх
capitan
Дата 25.8.2010, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 1
Всего: 13



enoff, спасибо, работает. Но не понимаю эту часть 
Код

(?:\.([a-z]*))
  в особенности
Код

?:


Как это работает, что за условие такое?
PM MAIL WWW ICQ   Вверх
enoff
Дата 25.8.2010, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 1
Всего: 13



(?smile - незахватывающие скобки. Если использовать скобки без ?: то данные из подмаски будут в массиве $modules, (и в переменной $n или \\n(где n - номер подмаски) в самом паттерне).
Код

(?:\.([a-z]*))?

если убрать ?:, то в массиве просто будет дополнительное значение.
Сгруппировал необязательное расширение с точкой, чтобы не разбираться с жадностью квантификаторов (из-за чего значение в массиве было не там, где хотелось бы).
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.