首页 > 解决方案 > PHP:我的正则表达式代码不能在本地工作,但在 regex101 上工作正常

问题描述

我使用 regex101 来测试我的正则表达式

这是我的正则表达式:

<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 中的正则表达式不起作用

我确定数据加载完成

我的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);

此页面的其他我的正则表达式代码工作正常,但这不起作用

我的代码;

$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);

标签: phpregex

解决方案


如果要解析 html ,请不要使用 regex。而是使用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


推荐阅读