За последние 24 часа нас посетили 17810 программистов и 1654 робота. Сейчас ищут 2017 программистов ...

Знак вопроса в регулярках

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

  1. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хочу разбить строку типа 'lalala?pupupu' через preg_match_all на две части. до вопросительного знака и после. =)

    вопросительный знак может быть а может и не быть
    после него текст может быть а может и не быть.

    вот это не работает:
    Код (Text):
    1. /(.+)\??(.*)/
    где грабли?
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    .+ - жадная часть выражения, а поскольку знак вопроса попадает под точку, то он первым захватывает вопрос, и для \?? его уже не остается. Вместо точки надо использовать маску любого символа, кроме вопроса
    Код (Text):
    1. preg_match_all('/([^?]+)\??(.*)/', 'aaa?bbb', $matches);
    2. var_dump($matches);