Я возвращаю содержимое HTML файла, который выглядит так:
<irrelevant things>
<tr id="myid">
<td>Content</td>
</tr>
<irrelevant things again>
или:
<irrelevant things>
<tr id="myid">
<td><a href="somewhere.com">Content</a></td>
</tr>
<irrelevant things again>
Можно ли получить только "Контент" для обоих случаев только с одним регулярным выражением?
Я пробовал это, но без каких-либо результатов:
preg_match('/<tr id="myid"><td>(<a href="[^\"]*">)?([^<]*)/', $html, $mycontent);
благодаря
Здесь можно сделать это с помощью регулярного выражения:
<td>(?:<a.*?>)?([^<]+)
Но было бы проще делать с парсерами DOM, такими как PHP Simple HTML DOM Parser
Regex - это не лучший способ для этого, и поскольку у вас есть id ("myid"), вы можете сделать это легко с помощью DOMDocument
. Пример:
$doc = new DOMDocument();
@$doc->loadHTML($yourstring);
$node = $doc->getElementById('myid');
echo trim($node->textContent);