2011-08-07 6 views
1

私は、HTML文書PHPのHTMLパーサのパフォーマンス

<input type="hidden" name="email" id="email" value="email%40hotmail.com"> 

から非表示の入力を抽出する必要があります私は現在http://simplehtmldom.sourceforge.net/を使用していますが、私は下のRAMの使用量を持つ任意の速いソリューションがあるかどうかを知りたいです。入力はドキュメントの途中にありますので、htmlページ全体を読み込む必要はありません。正規表現はより速く動作するでしょうか? 私は数百万のドキュメントに対処する必要があります。はっきりさせるために、私は電子メールのみを抽出する必要があります%40hotmail.com

答えて

0

あなたは、このことができます:

$html = '<input type="hidden" name="email" id="email" value="email%40hotmail.com">'; 
preg_match('%<input type="hidden" name="email" id="email" value="([^\"]+)">%', $html, $email); 

EDITED

私は正規表現がより高速で、誤りを犯しています。

1

その形式に完全一致するものだけが必要な場合は、正規表現を使用してください。汎用のhtml解析はできませんが、単純なパターンを得ることができます。

これはそれを行います。

<input type="hidden" name="email" id="email" value="([^"]*)"> 

ワイルドカードは、二重引用符ではないものと一致しました。 HTMLエンティティをデコードすることを忘れないでください。

+0

私は全体の入力ではなく、VALUEだけを取得しようとしています。あなたが私に与えたパターンを印刷すると、[0] =>配列 ( [0] => Michael

+0

@Michaelあなたはキャプチャしたい部分の周りに括弧を追加します。あなたの答えを修正しました。 – Ariel

1

私は、XPathで、かなり速く、良いメモリでDomDocumentを見つける。もう一つの利点は、これは定義された標準を使用しているので、かなり独立したアクセス可能で、通常は仕事をするために必要なものなので、同じものを使用しているライブラリをロードするより軽いかもしれません。

単純な文字列検索(開始パターンを探す、終了パターンを探す)は速いかもしれませんが、文書が変更されるとうまく調整できません。しかし、これは正規表現をコンパイルして実行するよりも高速です。

関連する問題