php - 如何从字符串中获取href值
问题描述
我试图href
从这个字符串中获取,但我不能,因为它在链接中有空间。我尝试从正则表达式中做到这一点,但我不是正则表达式方面的专家。我尝试使用互联网上的一个示例,但没有得到我想要的价值。
<table class="grid border" cellspacing="0" border="0" id="ctl00_ContentBody_grvStudentResult" style="width:100%;border-collapse:collapse;">
<tbody>
<tr>
<th align="left" valign="middle" scope="col">Code</th>
<th align="left" valign="middle" scope="col">Subject</th>
<th align="left" valign="middle" scope="col">Status</th>
<th align="center" valign="middle" scope="col">Score</th>
<th align="center" valign="middle" scope="col">Result Date</th>
</tr>
<tr class="detail1">
<td align="left" valign="middle">
DipPM15PQ
</td>
<td align="left" valign="middle">
<span class="">
1561|
<a onclick="return hs.htmlExpand( this, { objectType: 'iframe', width: 800, height: 600, outlineWhileAnimating: true, preserveContent: false } )" href="DetailResults.aspx?sid=90651&id=1769095&nsub= [Project Quality] &Subjectid=1561" title="Approved ">
<img alt="" style="display: online" src="../Images/Common/r_Approved.gif" border="0">
[Project Quality] </a>
</span>
<span class="selected">
</span>
</td>
<td align="left" valign="middle">
<span class="enable">
Competent
</span>
<center style="display: none">
<span disabled="disabled"><input id="ctl00_ContentBody_grvStudentResult_ctl02_chkAP" type="checkbox" name="ctl00$ContentBody$grvStudentResult$ctl02$chkAP" checked="checked" disabled="disabled"><label for="ctl00_ContentBody_grvStudentResult_ctl02_chkAP"> </label></span>
</center>
</td>
<td align="center" valign="middle">
75.00
</td>
<td align="center" valign="middle">
11/11/2018
</td>
</tr>
<tr class="detail1">
<td align="left" valign="middle">
DipPM15PC
</td>
<td align="left" valign="middle">
<span class="">
1559|
<a onclick="return hs.htmlExpand( this, { objectType: 'iframe', width: 800, height: 600, outlineWhileAnimating: true, preserveContent: false } )" href="DetailResults.aspx?sid=90898&id=1769088&nsub= [Project Costs] &Subjectid=1559" title="NAN ">
<img alt="" style="display: online" src="../Images/Common/r_.gif" border="0">
[Project Costs] </a>
</span>
<span class="selected">
[progress]
</span>
</td>
<td align="left" valign="middle">
<span class="disable">
</span>
<center style="display: none">
</center>
</td>
<td align="center" valign="middle">
</td>
<td align="center" valign="middle">
</td>
</tr>
</tbody>
解决方案
解析 HTML 的更好方法是使用DOMDocument
. 您可以使用它来处理您的 HTML 并hrefs
从 HTML 中的所有<a>
标签中查找。我假设您的 HTML 在一个名为的变量中$html
:
$doc = new DOMDocument();
$doc->loadHTML($html);
$anchors = $doc->getElementsByTagName('a');
foreach ($anchors as $a) {
$urls[] = $a->attributes->getNamedItem('href')->nodeValue . "\n";
}
foreach ($urls as $url) {
echo $url;
}
输出
DetailResults.aspx?sid=90651&id=1769095&nsub= [Project Quality] &Subjectid=1561
DetailResults.aspx?sid=90898&id=1769088&nsub= [Project Costs] &Subjectid=1559
如果您必须使用正则表达式,这将适用于您的示例数据:
preg_match_all('/href="([^"]+)/', $html, $matches);
print_r($matches[1]);
输出:
Array (
[0] => DetailResults.aspx?sid=90651&id=1769095&nsub= [Project Quality] &Subjectid=1561
[1] => DetailResults.aspx?sid=90898&id=1769088&nsub= [Project Costs] &Subjectid=1559
)
推荐阅读
- javascript - Flutter WebView blob 文件下载
- terraform - 在 terraform 中通过 helm 安装 Spinnaker
- angular8 - 如何在角度 ng-select 模型中显示默认占位符?
- python - Python 可以用 \n 从文件中读取行并将其打印成 2 行吗?
- swift - 如何从 NSViewRepresentable / UIViewRepresentable 的 Coordinator 类中访问 EnvironmentObject?
- flutter - 输入'列表
' 不是类型 'List 的子类型 ' - powerbi-desktop - Power Bi 嵌入式部署功能
- c++ - 当我们在 C++ 中进行分配时,我们是否只需要进行解除分配?
- express - NestJS 无法将参数从中间件传递给控制器动作
- mysql - MYSQL 选择所有 x 值为正的行