Регулярное выражение для получения содержимого ячеек со ссылкой или нет

0

Я возвращаю содержимое 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);

благодаря

  • 0
    Не уверен, сколько html вам нужно будет проанализировать, но вы смотрели HTML-парсер DOM или что-то в этом роде? (пример: simplehtmldom.sourceforge.net )
  • 0
    это одноразовая вещь, я предпочитаю обрабатывать ее (если могу) в 1 или 2 строки с помощью регулярного выражения вместо использования библиотеки
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

Здесь можно сделать это с помощью регулярного выражения:

<td>(?:<a.*?>)?([^<]+)

DEMO

Но было бы проще делать с парсерами DOM, такими как PHP Simple HTML DOM Parser

  • 0
    Именно то, что я хотел сделать. Спасибо !
4

Regex - это не лучший способ для этого, и поскольку у вас есть id ("myid"), вы можете сделать это легко с помощью DOMDocument. Пример:

$doc = new DOMDocument();
@$doc->loadHTML($yourstring);

$node = $doc->getElementById('myid');

echo trim($node->textContent);
  • 0
    спасибо, я не думал об этом. Это сделает свое дело.
  • 0
    @ Fiti В этом случае вы можете выбрать этот вариант в качестве принятого ответа.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню