PHP:我的regex代码不适用于本地,但适用于regex101



我使用regex101测试我的regex

这是我的正则表达式:

<a href="/name/nm0000130/?ref_=ttfc_fc_cr8">(.*)</a>

这是代码:

<tr>
<td class="name">
<a href="/name/nm0000130/?ref_=ttfc_fc_cr8"> Jamie Lee Curtis
</a>
</td>
<td>...</td>
<td class="credit">
executive producer
</td>
</tr>

这段代码在regex101上运行良好,但如果我通过file_get_contents获取数据并使用它,我在php中的regex就不能正常工作

我确信数据加载完成

我的php代码:

$data = file_get_contents('https://www.imdb.com/title/tt'.$tt.'/fullcredits', false, stream_context_create($contextOption));
preg_match_all('~<a href="/name/nm0000130/?ref_=ttfc_fc_cr8">(.*)</a>~isU', $data, $return);

这个页面的其他regex代码工作正常,但这不是工作

我的代码;

$contextOption = array("ssl" => array(  "verify_peer" => false,
"verify_peer_name" => false,
"allow_self_signed" => true));
$data = file_get_contents('https://www.imdb.com/title/tt1502407/fullcredits', false, stream_context_create($contextOption));
preg_match_all('~<a href="/name/nm0000130/.ref_=ttfc_fc_cr8"(.*)</a>~isU', $data, $return);

如果您想解析html,请不要使用正则表达式。相反,请使用DOMDocument或为该作业制作的其他工具。

下面是一个基本示例,说明如何使用DOMXpath类来处理相同的事情:

// get the html
$contextOption = ["ssl" => ["verify_peer" => false, "verify_peer_name" => false, "allow_self_signed" => true]];
$data = file_get_contents('https://www.imdb.com/title/tt1502407/fullcredits', false, stream_context_create($contextOption));
// load the html into DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($data);
$xpath = new DomXPath($dom);
// get anchor tag with href matching
$anchor = $xpath->query('//a[@href="/name/nm0000130/?ref_=ttfc_fc_cl_t1"]');
echo $anchor->item(0)->textContent;

输出:

Jamie Lee Curtis

最新更新