php - 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);
解决方案
如果要解析 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
推荐阅读
- chart.js - Chart.js,如何减少标签和条形之间的空间(水平条形图)
- python - 某些模型无法加载 Django 自然键
- python - 如何使我的程序读取多个 txt 文件并将其创建为 python 的数据框?
- r - “光栅 IO 期间失败”可能与光栅大小有关?
- c++ - 更新到 VS2019 16.6 后无法将范围变换分配给向量
- javascript - 基本 +=1 函数,变量保存在 cookie 中
- javascript - 如果比较的值是真的,那么 $.getJSON()
- azure-logic-apps - 具有 O365 的逻辑应用程序 - 更改“回复”
- reactjs - 如何在 ReactJS 功能组件中触发子方法
- powershell - 在 PowerShell 脚本中添加函数