Возникла проблема с сопоставлением элемента html с помощью Preg_Match.
-
19-09-2019 - |
Вопрос
Я пытаюсь сопоставить элемент html, но не думаю, что он соответствует, поскольку $titles пуст. Может ли кто-нибудь меня поправить?
Мой preg_match:
preg_match_all("~<td align=\"left\" width=\"50%\">[^<]*. <b><a href=\"(.*?)\">[^<]*</a>~i", $main, $titles);
Пример HTML для соответствия:
//<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>
Я что-то пропустил?
Спасибо всем за любую помощь
Решение
Нет ничего, что могло бы соответствовать title="Wat"
в <a>
ярлык.
Однако я бы предложил не использовать регулярное выражение для его анализа.Я не слишком хорошо знаком с PHP, но уверен, что в нем уже есть что-то, что сделает за вас большую часть работы.
Другие советы
Как я уже сказал в своем комментарии, регулярное выражение редко, если вообще когда-либо, является подходящим инструментом для анализа HTML.Я не собираюсь использовать пример Zend_Dom_Query, одного из компонентов Zend Framework, просто потому, что я еще не видел, чтобы он был рекомендован по одному из этих вопросов.Так...
$dom = new Zend_Dom_Query($htmlHaystack);
$anchors = $dom->query('//td/a[@title]'); // xpath here
if(count($anchors) > 0)
{
$titles = array();
foreach($anchors as $element)
{
$titles[] = $element->getAttribute('title');
}
}
else
{
$title = null;
}
$string='<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>';
$s = explode("</a>",$string);
foreach($s as $k){
if (strpos($k,"href")!==FALSE){
echo preg_replace('/.*href="|">.*/ms',"",$k);
}
}