首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取IMDb搜索

提取IMDb搜索
EN

Stack Overflow用户
提问于 2015-04-16 06:48:38
回答 2查看 199关注 0票数 1

我需要帮助提取带有下面字符串的照片urls

代码语言:javascript
复制
<tr class="findResult odd">
              <td class="primary_photo"><a href="/title/tt0499549/?ref_=fn_tt_tt_1" ><img src="http://ia.media-imdb.com/images/M/MV5BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw@@._V1_SX32_CR0,0,32,44_AL_.jpg" /></a></td>
              <td class="result_text"><a href="/title/tt0499549/?ref_=fn_tt_tt_1" >Avatar</a> (2009) </td>
            </tr>
            <tr class="findResult even">
              <td class="primary_photo"><a href="/title/tt0417299/?ref_=fn_tt_tt_2" ><img src="http://ia.media-imdb.com/images/M/MV5BMTM3MTc3OTc0NF5BMl5BanBnXkFtZTcwOTQ0OTM1MQ@@._V1._CR34,0,295,440_SX32_CR0,0,32,44_AL_.jpg" /></a></td>
              <td class="result_text"><a href="/title/tt0417299/?ref_=fn_tt_tt_2" >Avatar: The Last Airbender</a> (2005) (TV Series) </td>
            </tr>

我可以使用PHP HTML DOM解析器,但我正在学习正则表达式。这是我的密码

代码语言:javascript
复制
preg_match_all('!class="result_text"\s*>\s*<a href="/title/tt(?<imdbid>\d{7})/[^>]*>(?<title>.*?)</a>\s*(\([^\d{4}]\)\s*)?(\((?<year>\d{4})(.*?|)\)|)(?<type>[^<]*)!ims', $str, $matches);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-16 08:59:04

一般来说,使用regex只提取一些已知格式的标签中的URL和那些您信任的文件中的URL并不是个坏主意。

因此,我不喜欢用一个正则表达式解析两个相邻的标记,但因为您正在学习:

代码语言:javascript
复制
<img\s[^>]*src="(?<imageURL>[^"]*)"\s*\/> # IMG tag
.*?                                       # Anything in-between IMG and A
<a\s[^>]*?href="\/title\/tt
 (?<imdbid>\d{7})                         # Got the imdbid
 \/[^>]*>(?<title>.*?)                    # Got title
 <\/a>                                    # End of A tag
 \s*\(
      (?<year>\d{4})                      # Year
 \)\s*(?:\(                               # Type is optional 
      (?<type>[^<]*)                      # Type
 \))?                                     # End of optional group

请注意,[^\d{4}]没有什么意义,因为您否定了数字、{4{

请参阅演示

代码:

代码语言:javascript
复制
$re = "/<img\\s[^>]*src=\"(?<imageURL>[^\"]*)\"\\s*\\/> # IMG tag
.*?                                       # Anything in-between IMG and A
<a\\s[^>]*?href=\"\\/title\\/tt
  (?<imdbid>\\d{7})                        # Got the imdbid
  \\/[^>]*>(?<title>.*?)                   # Got title
  <\\/a>                                   # End of A tag
  \\s*\\(
       (?<year>\\d{4})                     # Year
   \\)\\s*(?:\\(                           # Type is optional 
      (?<type>[^<]*)                       # Type
     \\))?                                 # End of optional group/isx"; 
$str = "<tr class=\"findResult odd\">\n              <td class=\"primary_photo\"><a href=\"/title/tt0499549/?ref_=fn_tt_tt_1\" ><img src=\"http://ia.media-imdb.com/images/M/MV5BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw@@._V1_SX32_CR0,0,32,44_AL_.jpg\" /></a></td>\n              <td class=\"result_text\"><a href=\"/title/tt0499549/?ref_=fn_tt_tt_1\" >Avatar</a> (2009) </td>\n            </tr>\n            <tr class=\"findResult even\">\n              <td class=\"primary_photo\"><a href=\"/title/tt0417299/?ref_=fn_tt_tt_2\" ><img src=\"http://ia.media-imdb.com/images/M/MV5BMTM3MTc3OTc0NF5BMl5BanBnXkFtZTcwOTQ0OTM1MQ@@._V1._CR34,0,295,440_SX32_CR0,0,32,44_AL_.jpg\" /></a></td>\n              <td class=\"result_text\"><a href=\"/title/tt0417299/?ref_=fn_tt_tt_2\" >Avatar: The Last Airbender</a> (2005) (TV Series) </td>\n            </tr>"; 

preg_match_all($re, $str, $matches);
票数 1
EN

Stack Overflow用户

发布于 2015-04-16 06:59:45

考虑尝试:

代码语言:javascript
复制
preg_match_all('!<img src="(?<imageURL>[^"]*)"\s*>[.\s]*?class="result_text"\s*>\s*<a href="/title/tt(?<imdbid>\d{7})/[^>]*>(?<title>.*?)</a>\s*(\([^\d{4}]\)\s*)?(\((?<year>\d{4})(.*?|)\)|)(?<type>[^<]*)!ims', $str, $matches);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29667288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档