Как получить значение 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>

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не эксперт, но эта работа для меня

$string ='<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>';
preg_match_all( '~<a .*?href=[\'"](.*?)[\'"].*?>~', $string, $match );

$urls=array();//array of link
foreach($match as $m){
 if (isset($m[0])) {
    $url[]= $m[0];
}}

Спасибо за помощь в брови! Но это плохо работает = /

Gustavo Filgueiras 17.11.2018 06:54

@GustavoFilgueiras Можете ли вы уточнить, что именно не работает и как бы вы хотели, чтобы это работало лучше?

Ethan 17.11.2018 07:01

это регулярное выражение используется в WordPress для получения всего изображения из сообщения. Вы можете использовать его для получения любого атрибута.

Mahfuzar Rahman 17.11.2018 07:01

Да, прости! Итак, мне нужны все ссылки внутри массива, например

Gustavo Filgueiras 17.11.2018 07:07

$ url = [] $ url = "DetailResults.aspx? sid = 90651 & amp; id = 1769095 & amp; nsub = [Качество проекта] & amp; Subjectid = 1561" $ url = "DetailResults.aspx? sid = 90898 & amp; id = 1769088 & amp; nsub = [Стоимость проекта] & amp; Subjectid = 1559 "

Gustavo Filgueiras 17.11.2018 07:08
Ответ принят как подходящий

Лучший способ разобрать HTML - использовать DOMDocument. Вы можете использовать его для обработки вашего HTML и поиска hrefs из всех тегов <a> в вашем HTML. Я предполагаю, что ваш 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

Привет, Бровь, спасибо за помощь! :) Итак, я проверяю вашу демонстрационную ссылку, и она действительно работает ... Но для этого проекта мне действительно нужно использовать regex = /

Gustavo Filgueiras 17.11.2018 07:20

Регулярное выражение @GustavoFilgueiras действительно не является хорошим способом синтаксического анализа HTML. Но если нужно, я добавил к своему ответу возможное решение.

Nick 17.11.2018 08:06

Другие вопросы по теме