2011-07-05 6 views
1

ハードな質問(少なくとも私にとっては)誰かが私がすでに助けてくれたことを願っています。私はIMDBアクタページに正規表現を適用したPHP preg_match_all

$string = FetchPage($url); 
$image_regex_src_url = '/<td id="img_primary"[^>]*'. 'src=[\"|\'](.*)[\"|\']/Ui'; 
$img_tag_array = $out[0]; 
$image_regex_src_url = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui'; 
preg_match_all($image_regex_src_url, $string, $out, PREG_PATTERN_ORDER); 
$images_url_array = $out[1]; 

は、ここでは例として、ケビン・コスナーを取るIMDBサイトから俳優の画像を取得するには、このコードを持っている:私はオスカーの整数で勝った変数にフェッチするために私のコードを適応しようとしているhttp://www.imdb.com/name/nm0000126/

これまでのところ、「2オスカーを獲得しました。そしてラインから別の変数の彼の誕生日に「生まれ:ケビン・マイケル・コスナーリンウッド、カリフォルニア州、アメリカの 1955年1月18日」

このようなもので終わる:

$actor_oscars = 2; 
$actor_birthdate = "January 18, 1955"; 

事は、あります私の正規表現の知識は非常に限られており、私はすでにこれを試行錯誤的に行い、完全に失敗しました!私を助けるためにそこに良い魂?

PS:私はここでコードをスタックオーバーフローに入れようとしましたが、かなり見えますが、それでも私は全く成功しないようです!

ありがとうございます!

preg_match('/<td[^>]*id="img_primary".+?<img[^>]*src="([^"]+)"/s', $str, $matches); 

アカデミー賞ウォン:

preg_match('/Won\s(\d+)\sOscars\./', $str, $matches); 

誕生月 - 日:

各するpreg_matchライン$試合後
+0

これは適切なパーサーを使用する方が良いです(正規表現でHTMLを解析しないでください)。少なくともそのイメージのために。 ;-) – Qtax

+0

これにDOMを使用すると、はるかに優れています。 http://php.net/manual/en/book.dom.php – NorthGuard

+0

私はいつもやっていることを達成するより良い方法があると思っていましたが、私の知識は限られていると言っていました。私が理解している方法でしか動作しません。このため、私はちょうどこの1回だけデータを取得したいので、(もちろん)私はすでにこのメソッドに固執しなければならない作業を開始するコードを持っているためです。 :| –

答えて

2

は、[1]、望ましい結果

画像のURLが含まれています

preg_match('/<a href="[^"]*birth_monthday[^"]*">(.+?)<\/a>/', $str, $matches); 

出生年:

preg_match('/<a href="[^"]+birth_year[^"]+">(.+?)<\/a>/', $str, $matches); 
+0

ファンタスティック!私は正式にPHPの専門家を必要とするとき私の行く人にあなたを宣言する! :)あなたが私を助けるために取った時間と努力のおかげで! –

+0

ちょうどもう1つ秋...あなたのコードは、俳優が複数のオスカーを獲得したときにのみ機能します。俳優がちょうど1オスカーを獲得した場合、私は何をしなければならないかを知っていますか?(それは「オスカー」のページにあります)もし彼が '1つは何も簡単です...私はvaribleが定義されているかどうか、それが0に設定されていないかどうかを確認する必要があります:) –

+0

'if(preg_match('/Won \ sOscar/'、$ str)){ $ oscars = 1; } elseif(preg_match( '/Won\s(\d+)\sOscars\./'、$ str、$ matches)){ $ oscars = $ matches [1]; } else { $ oscars = 0; } ' – nobody