2011-01-10 10 views
1

<formをサイトから入手したいと思います。この状況のフォーム部分の間には、まだ他のhtmlコードがありません。どのようにそれらを削除するには?私はどのように正規のPHPとサイトからの部分を使用する方法を意味する?PHP正規表現の問題

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

「削除する」とはどういう意味ですか?あなたは '

'を望んでいて、それにはすべての要素が含まれています。期待される成果は? – Kobi

答えて

2

HTMLコンテンツの抽出に正規表現を使用しないでください。 DOM parserを使用してください。

など。

$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:

私はちょうど彼らがを持っていることに気づきました1つのフォームは全身の内容をラップします。そういうわけで、あなたは実際にページ全体を得るでしょう。

0

私が考えることができる最も良い方法は、PHPでSimple HTML DOMライブラリを使用して、DOMクエリを使用してHTMLページからフォームを取得することです。

simplexmlやdomdocumentのような組み込みのxmlパーサを使用するよりも少し便利です。

ここにthe libraryがあります。

1

正規表現の問題は、貪欲にあります。そのような場合は、.+?をお勧めします。

しかし、@フェリックスは言った。正規表現はHTML のために実行可能ですが、しばしば特定のものを探すので、むしろそれを解析する必要があります。あなたがQueryPathを使用する場合にも非常に簡単です:

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

'。+?'はこの場合には失敗し、JavaScript文字列には ''タグ*がネストされています。ああ、いや、なぜ! @Kobi。 – Kobi

+0

どのように彼らを敢えて!うーん、私はこれが実際にどのブラウザでも動作するのか分からなかった。 - そして、QueryPathがPHP用の最適なオプションであるかどうかはわかりません.DomDocumentを使用するので、それは十分に堅牢ではないかもしれません。 – mario

+0

''文字列は通常問題であり、 '' ''と書かれていることがあります。うん。 – Kobi

0

コードの一部はによって所定の位置に変更されると、通常は、HTMLを解析するDOMを使用する必要がありますが、この場合、ウェブサイトは非常に遠く、標準のHTMLであることからですjavascript。したがって、DOMオブジェクトにロードすることはできません。これは意図的なものであり、コードを難読化する方法です。

いずれにしても、あなたのRE(あまり貪欲でないマッチを使用すると助けになります)ではなく、自分が望むものを構文解析できないサイト自体のデザインです。