首页 > 解决方案 > 如何从字符串中获取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&amp;id=1769095&amp;nsub= [Project Quality] &amp;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&amp;id=1769088&amp;nsub= [Project Costs] &amp;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>

标签: phphtmlregextags

解决方案


解析 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

3v4l.org 上的演示

如果您必须使用正则表达式,这将适用于您的示例数据:

preg_match_all('/href="([^"]+)/', $html, $matches);
print_r($matches[1]);

输出:

Array ( 
    [0] => DetailResults.aspx?sid=90651&amp;id=1769095&amp;nsub= [Project Quality] &amp;Subjectid=1561
    [1] => DetailResults.aspx?sid=90898&amp;id=1769088&amp;nsub= [Project Costs] &amp;Subjectid=1559 
)

3v4l.org 上的演示


推荐阅读