2012-04-27 23 views
3

こんにちは、私の質問を見ていただきありがとうございます。 私はHTMLスニペットからいくつかのデータを取得する必要があります。 このソースは信頼できる/構造化されたソースなので、このHTMLでregexを使用することは問題ないと思います。ドームとPHPの他の高度な機能は私が推測する過剰人です。DIVタグの内容を取得する正規表現

ここにHTMLスニペットの形式を示します。

<div id="d-container"> 
    <div id="row-custom_1"> 
    <div class="label">Type</div> 
    <div class="content">John Smith</div> 
    <div class="clear"></div> 
    </div> 
</div> 

上記のうち、最初の2つのDIVタグにはIDが設定されていることに注意してください。 divタグのようないくつかの行custom_1が存在する可能性があるので、それらをエスケープする必要があります。

私は実際には正規表現では非常に貧弱ですので、上記のHTMLスニペットからJohn Smithにあなたの助けを期待しています。

それは

<div * id="row-custom_1" * > * <div * class="content" * >GRAB THIS </div> 

のようなものかもしれないが、私は正規表現でそれを行う方法がわかりません。 John Smithの部分には確かにhtmlが含まれていません。すべてのhtmlを取り除き、上記の形式でデータを提供するのは信頼できるソースからのものです。

とにかく正規表現は決してHTMLを処理するための良いアイデアではないことが理解できます。 ありがとうございました。

30分後に編集: すばらしい人の多くは、HTMLパーサーを使用するように提案しました。魅力的に働いた。だから誰も愚かな質問の著者のように、同様の質問でここに来る場合、私は仕事のためにDOMを使用することをお勧めしたいと思います。

+9

ようこそ! RegExを使ってHTMLを解析することは、[あなたを狂ってしまう]ようにしないでください(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) 。代わりに、[HTMLパーサ](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)を使用してください。 –

+0

@Truth:はい、私は同意します。私はこれを尋ねる前にここで多くの質問を読んで、私がしようとしていることが間違っていることに気づいた。 しかし、私はここでhtmlパーサーを使用することに非常に不思議です。私はページのHTMLタイトルを設定するユーザーの名前を取得しようとしているので、各ページの読み込み時にいくつかのDOMを起動することはあまり良いアイデアでもありません。 html構造は必ず同じです。 もう一度ありがとうございます。 –

+2

あなたのソースが「信頼できる」ものであっても、それが有効であることを確認する必要があります。 HTMLパーサーを使用する –

答えて

5

は、ここで指定したHTMLからあなたの価値を得るために、単純なDOMベースのコードです:

$html = <<< EOF 
<div id="d-container"> 
    <div id="row-custom_1"> 
    <div class="label">Type</div> 
    <div class="content">John Smith</div> 
    <div class="clear"></div> 
    </div> 
</div> 
EOF; 
$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); // loads your html 
$xpath = new DOMXPath($doc); 
$value = $xpath->evaluate("string(//div[@id='d-container'] 
     /div[@id='row-custom_1']/div[@class='content']/text())"); 
echo "User Name: [$value]\n"; // prints your user name 

OUTPUT:スタックオーバーフローに

User Name: [John Smith] 
+0

OMGは魅力的な作品、@anubhava !!! 非常にありがとう! HTML用の正規表現は使用しないでください。 投票ボタンを使用して15人の担当者を取得してください。 –

+1

SOコミュニティへようこそ。 HTMLを解析するために正規表現を使用することで一人でさえ止めることができたとしても、私はこの答えを提供するために5分を費やす価値があると思います。また、私は今あなたの質問から15人以上の担当者を持っていると思う:) – anubhava

関連する問題