Проблема с php regex

Я хочу получить <form > с сайта. но между частью формы в этой ситуации все еще есть mnay другой html-код. как их удалить? Я имею в виду, как использовать php только регулярные и часть с сайта?

 $str = file_get_contents('http://bingphp.codeplex.com'); preg_match_all('~<form.+</form>~iUs', $str, $match); var_dump($match); 

Related of "Проблема с php regex"

Вы не должны использовать регулярные выражения для извлечения содержимого HTML. Используйте парсер DOM .

Например

 $doc = new DOMDocument(); $doc->loadHTMLFile("http://bingphp.codeplex.com"); $forms = $doc->getElementsByTagName('form'); 

Обновление: если вы хотите удалить формы (не уверен, что вы имели в виду это):

 for($i = $forms.length;$i--;) { $node = $forms->item($i); $node->parentNode->removeChild($node); } 

Обновление 2:

Я только заметил, что у них есть одна форма, которая обертывает все содержимое тела. Так или иначе, вы получите всю страницу на самом деле.

Проблема с регулярным выражением заключается в жадности. Для таких случаев .+? является целесообразным.

Но что сказал @ Феликс. Хотя регулярное выражение работает для извлечения HTML, вы часто смотрите на что-то конкретное и должны, таким образом, анализировать его. Это также намного проще, если вы используете QueryPath :

  $str = file_get_contents('http://bingphp.codeplex.com'); print qp($str)->find("form")->html(); 

Лучший способ, который я могу придумать, – использовать библиотеку Simple HTML DOM с PHP для получения форм (ов) с HTML-страницы с помощью запросов DOM.

Это немного удобнее, чем использование встроенных XML-парсеров, таких как simplexml или domdocument.

Здесь вы можете найти библиотеку .

Обычно вы должны использовать DOM для синтаксического анализа HTML, но в этом случае веб-сайт очень далек от стандартного HTML, причем часть кода изменяется на месте с помощью javascript. Поэтому он не может быть загружен в объект DOM. Это может быть преднамеренным, способ обфускации кода.

В любом случае, это не столько ваш RE (хотя использование не-жадного матча помогло бы), но и дизайн самого сайта, который мешает вам разобрать то, что вы хотите.