Я пытаюсь получить 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>






Я не эксперт, но эта работа для меня
$string ='<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>';
preg_match_all( '~<a .*?href=[\'"](.*?)[\'"].*?>~', $string, $match );
$urls=array();//array of link
foreach($match as $m){
if (isset($m[0])) {
$url[]= $m[0];
}}
@GustavoFilgueiras Можете ли вы уточнить, что именно не работает и как бы вы хотели, чтобы это работало лучше?
это регулярное выражение используется в WordPress для получения всего изображения из сообщения. Вы можете использовать его для получения любого атрибута.
Да, прости! Итак, мне нужны все ссылки внутри массива, например
$ 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 "
Лучший способ разобрать 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
Если вы используете имеют для использования регулярного выражения, это будет работать для ваших демонстрационных данных:
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
)
Привет, Бровь, спасибо за помощь! :) Итак, я проверяю вашу демонстрационную ссылку, и она действительно работает ... Но для этого проекта мне действительно нужно использовать regex = /
Регулярное выражение @GustavoFilgueiras действительно не является хорошим способом синтаксического анализа HTML. Но если нужно, я добавил к своему ответу возможное решение.
Спасибо за помощь в брови! Но это плохо работает = /