Нужно спарсить значения 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">
Универсальность имеет свою цену: если все объединить в одно регулярное выражения, например с помощью логического "ИЛИ", то в результате будет трудно отличить значения value от name и наоборот.
Я так и предполагал. Интересно было бы увидеть как используют комплекс регулярок с фиксом состояний в конечных автоматах. Хочу построить анализатор, слушал лекции по теории компиляции родом с 90-х годов, не сильно впечатлило ) Хотелось бы на практике увидеть как браузеры анализируют теги и не особо вдаваться в теорию компиляции ибо она скучная как разгадывание капчи вручную.
Таки да. Но если усложнить задачу, например, парсить и выполнять javascript на php, ака писочница. Где найти решение? Это мне не от нефиг делать, могу в аську пример js кода скинуть, который нельзя просто так деобфусцировать и понять как он работает, по крайней мере, я не могу.
PHP: $pattern = '#<input.*?name=\"(.*?)\".*?value=\"(.*?)"|<input.*?value=\"(.*?)"\name=\"(.*?)\".*?"#'; А вообще рег-ками html парсить мазохизм, юзай dom парсеры, как и написали выше.