удалить таблицу с хтмл кода с определенными строками

Статус
В этой теме нельзя размещать новые ответы.

Liver

Гуру форума
Регистрация
24 Сен 2008
Сообщения
315
Реакции
92
Есть простой код
Код:
<table border="0" cellspacing="0" align="right" width="226" cellpadding="0">
  <tr>
    <td>text</td>
  </tr>
</table>

some text

<table border="0" cellspacing="0" align="right" width="226" cellpadding="0">
  <tr>
    <td>text</td>
  </tr>
</table>

some text

<table border="0" cellspacing="0" align="right" width="226" cellpadding="0">
  <tr>
    <td class="someclass">text</td>
  </tr>
</table>

нужно удалить таблицу, где есть ячейка с классом "someclass". Сначала написал решение в лоб.
Код:
<table.+?<td class="someclass">.+?</table
Все было замечательно. Но оказалось, что перед этой таблицей могут быть и другие таблицы. И в итоге все вырезается.
Я даже не знаю в какую сторону начать думать, чтобы написать "не вырезать таблицы, а только эту"
 
Измени жадность шаблона на противоположную, чтобы искалось минимально возможное соответствие.
 
Измени жадность шаблона на противоположную, чтобы искалось минимально возможное соответствие.

Ничего не понял, но убрал ?. Никакого эффекта. Изменение жадности тут не поможет.

Но на меня снизошло озарение и выдало вот такой паттерн
Код:
$result = preg_replace('%((?:<table.+?<td>.+?</table>.+?)*)<table.+?<td class="someclass">.+?</table>%sim', '$1', $subject);
С этим выражением правильно чиститься тестовый код.
 
Все проще на самом деле.
Код:
<table(?:(?!</table).)+?<td class="someclass">.+?</table>
 
Все проще на самом деле.
Код:
<table(?:(?!</table).)+?<td class="someclass">.+?</table>


Ух. Неужели наконец то мне показали, как делать отрицание. Было б можно, поставил бы 10 спасибо. А где можно прочитать про него? На "(?!" поисковики ничего не находят. А эксперименты на практике не дают полного понимания.
 
Ух. Неужели наконец то мне показали, как делать отрицание. Было б можно, поставил бы 10 спасибо. А где можно прочитать про него? На "(?!" поисковики ничего не находят. А эксперименты на практике не дают полного понимания.
Сам начал понимать данную конструкцию после прочтения книги Фридл Дж. Регулярные выражения (2-е изд.). Лучшая книга именно для понимания, и составления оптимальных рег. выражений.
Сейчас уже есть (3-е издание) в неё добавлено описание специфики составления регулярных выражений под PHP, но в электронном виде не нашел ее.
 
+1 в пользу Фридла. Очень толковая книга, дает понимание. Можно и второе издание, в третьем мало что добавили. После книги посмотреть маны по PCRE и Perl, чтобы узнать о новых возможностях регулярных выражений.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху