我想從網站獲得<form
>。但在這種情況下的表單部分之間,還有其他的html代碼。如何刪除它們?我的意思是如何使用PHP只是定期和部分從網站?php正則表達式問題
$str = file_get_contents('http://bingphp.codeplex.com');
preg_match_all('~<form.+</form>~iUs', $str, $match);
var_dump($match);
我想從網站獲得<form
>。但在這種情況下的表單部分之間,還有其他的html代碼。如何刪除它們?我的意思是如何使用PHP只是定期和部分從網站?php正則表達式問題
$str = file_get_contents('http://bingphp.codeplex.com');
preg_match_all('~<form.+</form>~iUs', $str, $match);
var_dump($match);
您不應該使用正則表達式來提取HTML內容。使用DOM parser。
E.g.
$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:
我只注意到他們有一個包含全身內容的格式。所以這樣或那樣,你會得到整個頁面。
我能想到的最好的方法是使用PHP的簡單HTML DOM庫來從HTML頁面使用DOM查詢獲取表單。
這比使用像simplexml或domdocument這樣的內置xml解析器更方便一些。
您可以在這裏找到the library。
正則表達式的問題在於貪婪。對於這種情況,建議使用.+?
。
但是@Felix說了些什麼。雖然正則表達式對於HTML 提取可行,但您經常會查找特定的內容,因此應該對其進行解析。它也更簡單,如果你使用QueryPath:
$str = file_get_contents('http://bingphp.codeplex.com');
print qp($str)->find("form")->html();
`。+?`在這種情況下會失敗 - 它們在JavaScript字符串*中嵌套了`
通常情況下,你應該使用DOM來解析HTML,但在這種情況下,網站是很遠不是標準的HTML,與一些代碼正在地方通過修改JavaScript的。因此它不能被加載到DOM對象中。這可能是故意的,這是一種混淆代碼的方式。
無論如何,它不是你的RE(雖然使用非貪婪的匹配會有所幫助),但是網站本身的設計阻止了你解析出你想要的東西。
你是什麼意思「刪除它們」?你想要`