2010-11-23 7 views
1

書籍や記事に関する基本情報を取得するために、WorldCat.orgの検索結果を解析しようとしています。正規表現でウェブサイトを解析できない

典型的な検索結果(と私はテストのために使用しています1)はここで見つけることができます: http://www.worldcat.org/search?q=ti%3Aorganizations&fq=dt%3Abks&qt=advanced&dblist=638

そのページのHTMLはここにある:ここでhttp://pastebin.com/w2U91F1i

は、私は「正規表現です

$data = file_get_contents($url); 
preg_match_all('/<div class="oclc_number">(.*?)<\/div>\n.*?<div class="name">\n.*?<a href="(.*?)"><strong>(.*?)<\/strong><\/a>\n.*?\n\n<div class="author">by\s(.*?)<\/div><div class="type">.*?<span class=\'itemType\'>(.*?)<\/span>.*?\n.*?<span class="itemLanguage">(.*?)<\/span>.*?<div class="type">Publication:\s*?(.*?)<\/div>/', $data, $topics, PREG_SET_ORDER); 

私はregexrツール(http://gskinner.com/RegExr/)と、この式を使用すると、それだけで正常に動作します(E:各エントリについての基本的な詳細をキャプチャするためにPHPのpreg_match_allを使用してメートルxcept私は\ nの代わりに\ rを使います - 通常は\ rは私のためには機能しません)。しかし、preg_match_allは毎回空の配列を返します。

私が間違っていることについての手掛かりはありますか?

+4

。 –

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Phil

+1

@Ignacio短いと甘い、それは大好きだが、それほど役に立たない。 – tchaymore

答えて

3

私はHTMLをスクレープする必要があるときはいつも、HTMLツリーをとり、それをJQueryのようなクエリを実行できるトラバース可能なPHPオブジェクトに解析するSimple HTML DOM Parserライブラリを使用する傾向があります。

+0

それはかなり滑らかに見えます - 私はそれをチェックするつもりです。役に立つリンクをありがとうございました。 – tchaymore

-1

HTMLは標準言語ではありません。正規表現で解析することはできません。

は、ここに最初の答えを読む:あなたがHTMLを解析するために正規表現を使用している

RegEx match open tags except XHTML self-contained tags

+0

間違っています。正規表現はありません。試行しない理由は、できるかどうかとは関係がありません。それはどれくらいの悩みに関係しているのですか。 SCHOOLBOY REGULARではないので、現代の正規表現で何かを解析できます。しかし、あなたができるからといって、あなたがすべきではありません。代わりに誰かの仕事を使用してください。 Regexesは既知のHTMLには全く問題ありません。実際、彼らはしばしば最適です。問題があるのは一般的なランダムHTMLだけです。 parrotingをやめてください。 – tchrist

+0

あなたは私が決して言わなかったことに答えました。あなたはトロールです。 –

+0

あなたは「正規表現ではないので正規表現を使用しないでください」と言っています。それは本当にばかげたことです。実際、それは私にとってはむしろ血小板状に聞こえる。 – tchrist