2012-01-30 16 views
2

私は汚れたhtmlページからこのURLを取得する必要があります。HTMLページ内のURLを取得する方法は?

......... http://www.imdb.com/title/tt0092699/ ......

明らかURLも

http://www.imdb.co.uk/title/tt0092699/ のhttpことができます://www.imdb.es/title/tt0092699/ http://www.imdb.com/title/tt0092699 https://www.imdb.com/title/tt0092699/ https://www.imdb.com/title/tt0092699

(.domainを、HTTP/HTTPS、または最後のスラッシュなし)

+0

プロトコルに依存しないURLの問題はありますか? –

答えて

4

は、この正規表現を使用します。

preg_match("/https?:\/\/www.imdb\..*?\/title\/tt\d+\/?/", $html, $matches); 

したいURLを$matches[0]になります。ここで

は、1枚ずつ分解、正規表現の意味です:

  • / =>オプションs
  • :\/\/www.imdb\. =>リテラル://www.imdb.
  • .*?\/続い
  • https? =>リテラルhttpはRegex開始します=>は、スラッシュの前に可能な最短の文字列と一致し、スラッシュと一致します。ドメインの端に一致する、どのようなことがある(comco.ukes、等...)と、少なくとも一桁続い
  • title\/ =>リテラルtitle/
  • tt\d+ =>リテラルtt(以下第一のスラッシュそれは貪欲な試合なので、できるだけ多くの連続した数字に一致します。あなたが
  • を提供する形式でのIDと一致します
  • \/? =>オプションの最終/
  • / =>最後の正規表現
+1

私は、正規表現でもう少し選択されることをお勧めします。 'http://www.imdb.spoofeddnsat.example.com /.*'は良いデータ源ではありません。代わりに、 '/ https?:\/\/www \ .imdb \ .com?(\。[a-z] {2})?\ /.../'を試してください。 – ghoti

+0

ハハハ。私は常に私の銀行からの電子メールのような電子メール "セキュリティ警告"を見る。 – Graham

0

これがうまく働くだろうと、それはまた、プロトコルに依存している//で始まるURLのと一致します'スキーム'。

(https?:|//)[^\s"]+ 
+0

"//"はURLの有効な開始ではありません。 – Graham

+2

ええ、はい、それは投票の価値がありません。 http://paulirish.com/2010/the-protocol-relative-url/ –

+0

私の良さ!私は今まで知らなかった!ありがとう!投票が変更されました。 :-) – Graham

関連する問題