Двойная регулярка

Discussion in 'PHP' started by AnGeI, 17 Jan 2013.

  1. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Нужно спарсить значения name и value для всех input из формы. Делаю так:
    PHP:
        $pattern '#<input.*?name=\"(.*?)\".*?value=\"(.*?)\"#'
        
    preg_match_all($pattern$html$matches);
    Все хорошо парсится.
    Но сервер иногда пытается обмануть и высылает value перед name.
    Приходится анализировать каждый input отдалельно на предмет последовательности этих параметров.
    Интересует можно ли как-то сделать это красиво одной регуляркой?
    Примеры input:
    PHP:
    <input type="hidden" name="ice" value="cream">
    <
    input type="hidden" value="cream" name="ice">
     
    #1 AnGeI, 17 Jan 2013
    Last edited: 17 Jan 2013
  2. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    Универсальность имеет свою цену: если все объединить в одно регулярное выражения, например с помощью логического "ИЛИ", то в результате будет трудно отличить значения value от name и наоборот.
     
    1 person likes this.
  3. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Я так и предполагал.
    Интересно было бы увидеть как используют комплекс регулярок с фиксом состояний в конечных автоматах.
    Хочу построить анализатор, слушал лекции по теории компиляции родом с 90-х годов, не сильно впечатлило )
    Хотелось бы на практике увидеть как браузеры анализируют теги и не особо вдаваться в теорию компиляции ибо она скучная как разгадывание капчи вручную.
     
    #3 AnGeI, 18 Jan 2013
    Last edited: 18 Jan 2013
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,761
    Likes Received:
    816
    Reputations:
    230
    И накой что-то там строить? Бери любой DOM парсер и используй или изучай.
     
    _________________________
  5. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Таки да. Но если усложнить задачу, например, парсить и выполнять javascript на php, ака писочница.
    Где найти решение?
    Это мне не от нефиг делать, могу в аську пример js кода скинуть, который нельзя просто так деобфусцировать и понять как он работает, по крайней мере, я не могу.
     
    #5 AnGeI, 18 Jan 2013
    Last edited: 18 Jan 2013
  6. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    736
    Likes Received:
    73
    Reputations:
    19
    PHP:
     $pattern '#<input.*?name=\"(.*?)\".*?value=\"(.*?)"|<input.*?value=\"(.*?)"\name=\"(.*?)\".*?"#';  
    А вообще рег-ками html парсить мазохизм, юзай dom парсеры, как и написали выше.
     
    2 people like this.
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,761
    Likes Received:
    816
    Reputations:
    230
    Брать готовый движок, например, SpiderMonkey и делать или искать биндинги к нему для ПХП
     
    _________________________
    1 person likes this.
Loading...