За последние 24 часа нас посетили 35335 программистов и 1814 роботов. Сейчас ищут 857 программистов ...

Не работает простой регексп

Тема в разделе "PHP для новичков", создана пользователем freelsd, 4 мар 2016.

  1. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Код (PHP):
    1. $str = '/webdata/w/statistics.php?show=web';
    2. preg_match("/(.*)\/(.+)\?*(.*)/", $str, $matches);
    3. print_r($matches); 
    Выводит:
    Хотя по идее второй элемент должен быть просто именем файла а не QUERY_STRING. Что не так с регуляркой и как заставить ее работать (нужно именно работающее регулярное выражение).

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    жадностью немного поиграться. символ вопроса входит и в первую и во вторую группу. поскольку сам вопрос - может быть а может и не быть - и плюс он же еще и может входить в третью группу - механизм пихает вопрос в первое удобное место. а поскольку слэш обязательный то подходящим местом становится именно вторая группа.

    а точно регулярка нужна? всякие дирнеймы и парс_урлы делают то же самое но точно работающим путём
     
  3. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    В какую сторону с жадностью играться не совсем ясно. Если жадность поставить, то в результате будет только один символ. Да нужен именно регекс. Пока только такой вариант придумал:

    Код (PHP):
    1. preg_match("/(.*)\/(.[^\?]+)\?*(.*)/", $str, $matches); 
    Так что вопрос в общем-то решен. Спасибо вам за участие!

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.