Я хочу получить <form
> с сайта. но между частью формы в этой ситуации все еще есть mnay другой html-код. как их удалить? Я имею в виду, как использовать php только регулярные и часть с сайта?
$str = file_get_contents('http://bingphp.codeplex.com'); preg_match_all('~<form.+</form>~iUs', $str, $match); var_dump($match);
Вы не должны использовать регулярные выражения для извлечения содержимого 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 (хотя использование не-жадного матча помогло бы), но и дизайн самого сайта, который мешает вам разобрать то, что вы хотите.