За последние 24 часа нас посетили 16634 программиста и 1589 роботов. Сейчас ищут 1346 программистов ...

Проблема с группирующими скобками

Тема в разделе "Регулярные выражения", создана пользователем nikolay, 12 июн 2012.

  1. nikolay

    nikolay Активный пользователь

    С нами с:
    5 авг 2011
    Сообщения:
    17
    Симпатии:
    0
    Есть такая регулярка:

    Код (Text):
    1. '/^\/(?:[-_a-z0-9]\.html)*?$/i'
    Если после [-_a-z0-9] не поставить *?, то не работает. Вернее, работает, но не так, как надо. Проходит проверку что-то типа 1.html, а не, скажем, 11.html. То есть срабатывает только на один символ. Но разве звёздочка после круглых скобок не должна распространяться на всё, что в скобках?

    Вот работающий вариант:

    Код (Text):
    1. '/^\/(?:[-_a-z0-9]*?\.html)*?$/i'
    И ещё такой вопрос, насколько такая проверка устойчива к взлому? Логика такая - url может содержать [-_a-z0-9], затем .html, плюс корень (/) и больше ничего. Всё ли учёл?

    Наконец, а можно ли как-то решить проблему такого URL = http://www.site.ru/\, то есть обратный слеш в конце? Регулярка почему-то его не перехватывает, а сервер редиректит на свою 404 страницу, даже при наличии errordocument в htaccess. Есть ли ещё такие затыки, как обратный слеш в URL?

    Всем спасибо!