В коллекцию: url (http||https||ftp)

Тема в разделе "Регулярные выражения", создана пользователем Slayter, 24 ноя 2007.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    /^((http|https|ftp:(\/\/([a-zA-Z0-9-])+(\.([a-zA-Z0-9-])+)*(\.([a-zA-Z0-9~\/]){2,6}+)+)?$/
     
    Lucid_Mind и noobie нравится это.
  2. ustas76

    ustas76 Постоялец

    Регистр.:
    15 фев 2007
    Сообщения:
    140
    Симпатии:
    25
    а теперь по слогам опиши что тут такое, а лучше где скопировал такое гениальное произведение, а лучше удали.
     
  3. invader

    invader Серый кардинал в отставке :)

    Moderator
    • Супермодератор
    Регистр.:
    3 апр 2006
    Сообщения:
    2.718
    Симпатии:
    5.693

    Поумничать не получилось. Смотрим название раздела и включаем мозг или то что от него осталось.
    Регулярки не знать....
     
  4. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    ^ - начало шаблона
    $ - конец шаблона
    и начало и конец шаблона - метасимволы. эскейпятся.
    (http|https|ftp) - строка начинается с http ИЛИ https ИЛИ ftp
    :\/\/ - это "://" но по скольку "/" это метасимвол он эскейпится. символ эскейпа это "\", вот и получили.
    ([a-zA-Z0-9-])+ - указывается диапазон. нижний и верхний регистр буквы от a до z, кроме того символы от 0 до 9. знак + указывает на то, что это один или более символов.
    аналогично с (\.([a-zA-Z0-9-])+)* - "." - это опять же метасимвол и он эскейпится. далее тот же шаблон букв латинского алфавита от a до z в нижнем и верхних регистрах. знак + указывает на то, что длина этой подстроки может быть не менее одного символа. а весь шаблон взять в скобки и затем поставлен знак "*" - что значит от от нуля символов. т.е. если таким образом мы на дадим написать что-то вроде http://subdomain..com/
    (\.([a-zA-Z0-9~\/]){2,6}+) - шаблон для зоны. от 2 до 6 символов + "." + необязательный "/" - чтобы не сильно напрягать пользователя.

    таким образом мы получаем валидный шаблон для чего-то типа ftp://ustas.commandore.org ;)
     
  5. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    строго говоря у меня предложенный паттерн работать отказался..

    проедлагаю свой вариант:
    (^(?>(http|https|ftp):(\/\/(?>(\w|\d|-)+\.)?(\w|\d|-)+\.(\w|\d){2,6}(\/)?)

    не самый производительный (в основном из-за альтернатив), но вплоне рабочий паттерн..

    зы..
    думаю вот такого как раз мы давать писать не должны, потому, как таких адресов не существует..
     
  6. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    не "на", а "не" имелось ввиду. опечатался.
    + туда же про эскейпинг и конец строки. конец на конце (фигассе скозал) не эскейпится
     
  7. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    кстати это еще не все (я про свой пример)..
    нужно убрать метасимвол ^ в начале паттерна, что бы он смог нормально искать по всему тексту..

    а если сие на русский перевести?..
     
  8. ustas76

    ustas76 Постоялец

    Регистр.:
    15 фев 2007
    Сообщения:
    140
    Симпатии:
    25
    ^(?:https?|ftp)\:\/\/(?:[a-z0-9]\.|[a-z0-9][-a-z0-9]{0,61}[-a-z0-9]\.)*(?:[a-z]{2}|com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero)$

    обрабатывает все комбнации, хоть www.ru

    незабываем про модификатор i или PCRE_CASELESS
    про \d или \w читаем хелп
    перед использованием $url = trim($url, '/ ');
    если есть вопросы и сомнения, читайте доки
     
  9. Кристя

    Кристя Постоялец

    Регистр.:
    11 май 2007
    Сообщения:
    69
    Симпатии:
    5
    ты забыл про зону .mobi

    а зачем $url = trim($url, '/ ');
    ?
     
  10. roddik

    roddik Колбаска

    Регистр.:
    26 янв 2007
    Сообщения:
    351
    Симпатии:
    285
    а что этот метасимвол означает? случайно не концы строки? так может другой ограничитель логично бы использовать?
    о модификаторах кто-то слышал, типа что #[aA]# это то же что и #a#i ?
    а о \d, \w?
    а о отличии () от (?:) ?
    да и как в урле могут быть заглавные буквы?

    бредовый шаблон
     
Статус темы:
Закрыта.