我不是很擅长正则表达式并且无处不在。 我可以使用一些帮助来解析此页面(http://www.imdb.com/search/title?count=100&groups=oscar_best_picture_winners&sort=year,desc&ref_=nv_ch_osc_3)以获取电影名称。 P.S:也可以使用虚拟正则表达式。
答案 0 :(得分:2)
这几乎与您之前的问题相同的问题,答案是相同的......虽然修改了正则表达式。
#<td class="number">(\d+).</td>.*?<a href="/title/tt\d+/">(.*?)</a>#s
https://stackoverflow.com/a/19600974/2573622
有关详细信息,您可能需要查看以下链接:
http://www.regular-expressions.info/
单击顶部菜单栏上的 Tutorial ,有关于所有正则表达式的解释。
首先,您必须从页面中获取相关的html(对于一部电影)...
<td class="number">RANK.</td>
<td class="image">
<a href="/title/tt000000/" title="FILM TITLE (YEAR)"><img src="http://imdb.com/path-to-image.jpg" height="74" width="54" alt="FILM TITLE (YEAR)" title="FILM TITLE (YEAR)"></a>
</td>
<td class="title">
<span class="wlb_wrapper" data-tconst="tt000000" data-size="small" data-caller-name="search"></span>
<a href="/title/tt000000/">FILM TITLE</a>
然后删除噪音/可变信息...
<td class="number">RANK.</td>.*?<a href="/title/tt\d+/">FILM TITLE</a>
然后添加您的捕获组......
<td class="number">(RANK).</td>.*?<a href="/title/tt\d+/">(FILM TITLE)</a>
就是这样:
#<td class="number">(\d+).</td>.*?<a href="/title/tt\d+/">(.*?)</a>#s
结束模式分隔符后的s
修饰符使正则表达式引擎使.
匹配新行
与上一个答案相同(使用修改后的正则表达式)
$page = file_get_contents('http://www.imdb.com/search/title?count=100&groups=oscar_best_picture_winners&sort=year,desc&ref_=nv_ch_osc_3');
preg_match_all('#<td class="number">(\d+).</td>.*?<a href="/title/tt\d+/">(.*?)</a>#s', $page, $matches);
$filmList = array_combine($matches[1], $matches[2]);
然后你可以这样做:
echo $filmList[1];
/**
Output:
Argo
*/
echo array_search("The Artist", $filmList);
/**
Output:
2
*/
http://php.net/manual/en/reference.pcre.pattern.modifiers.php
http://php.net/file_get_contents
http://php.net/preg_match_all
http://php.net/array_combine
http://php.net/array_search
答案 1 :(得分:0)
不确定您执行/不需要哪些反斜杠:
href=\"\/title\/tt.*height=\"74\" width=\"54\" alt=\"([^"]*)\"
有用的结果是\1
或$1