Регулярка php preg_match table + class

234
22 октября 2017, 23:11

Здравствуйте, требуется помощь в написание регулярки для PHP preg_match, нужно вытащить весь текст вместе с тегами (<table>), которые имеют определенный класс (class="test"), который в свое время может находится в любой очередности возможных атрибутов.

Например

<table class="test">
   <tr>
      <td>bla bla bla</td>
   </tr>
</table>

или

<table border="1" class="test">
   <tr>
      <td>bla bla bla</td>
   </tr>
</table>

или

<table border="1" style="color:#bb0011" class="test">
   <tr>
      <td>bla bla bla</td>
   </tr>
</table>
Answer 1
/<table\b[^>]*?\bclass\s*=\s*(['"]).*?\btest\b.*?\1.+?<\/table>/si

Что ищем

  • <table - последовательность <table
  • \b - конец слова. <tablerow нам не подходит
  • [^>]*? - любые символы, кроме > в любом количестве, но не жадно
  • \bclass - слово, начинающееся с class
  • \s*=\s* - знак =, обрамленный 0 или больше пробелов
  • (['"]) - одинарная или двойная кавычка
  • .*? - любые символы в любом количестве
  • \btest\b - отдельное слово test
  • .*? - любые символы в любом количестве
  • \1 - именно та кавычка, которая нам встретилась до этого
  • .+? - любые символы в количестве одного или больше
  • <\/table> - закрывающий тег
  • /si - не учитывать переводы строк, регистр не учитывать
Answer 2

Прошу прощения, может не в тему, а если использовать DOMDocument?

$html = "Ваш html код";
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$result = $xpath->query("//table[@class=\"test\"]");
foreach ($result as $table)
{
    echo $dom->saveHTML($table);
}
READ ALSO
Передача параметров по кнопке в php

Передача параметров по кнопке в php

На сайте имеется компонент тестирования AriQuizВо время тестирования на вопросы можно отвечать, или пропускать(чтобы ответить позже)

270
Проверить активность соединения

Проверить активность соединения

Есть два Инет-провайдеракоторые "отваливаются" с непредсказуемой периодичностью

209
Как к элементу массива, присвоить данные с поля?

Как к элементу массива, присвоить данные с поля?

Как к элементу массива UserName, присвоить данные с input type="text"?

195
Как смогли обойти проверку и украсть средства?

Как смогли обойти проверку и украсть средства?

Ребят, приветствуюНа сайте случалась ситуация, что один из пользователей смог обойти проверку и украсть средства

212