Регулярное выражение для исключения выражения, если в таблице

0

Мне нужно зафиксировать выражение, но только если оно не находится в таблице. Я использую Ruby.

hello.
<p>
  <b>  1 capture  </b>
</p>
<table class="tb1">
  <tr>
    <td>
      <p>
        <b> 1 don't capture </b>
      </p>
    </td>
  </tr>
</table>
<p><strong> 2 capture </strong></p>
<table><tr>  <td>  <p>  <b>  2 don't capture  </b>  </p>  </td>  </tr>  </table>
<p>  <b>  3 don't capture  </b>  </p> Some text here...
<p>  <strong>  4 don't capture  </strong> Some text here... </p>
<table fdfdfdfd>
<tr>
  <td>
    <p>  <b>  5 don't capture  </b>  </p>
  </td>
  <table>
    table...
  </table>
 </tr>
</table>

Результат должен быть следующим:

<p>
  <b>  1 capture  </b>
</p>
<p><strong> 2 capture </strong></p>

В настоящее время у меня есть это регулярное выражение: \n\s*<p>\s*<(strong|b)>(?:(?!</\1>).)+</\1>\s*</p>\s*\n

Пробовал просмотр, который исключает выражение, если перед ним есть </table> и no <table.*>, Но есть некоторые сложные проблемы с жадными выражениями и проблемами с новой строкой.

Edit: Я знаю, что есть другие способы сделать это, но я должен знать, что это возможно или нет с регулярным выражением.

  • 2
    использовать Nokogiri, чтобы сделать жизнь проще ...
  • 0
    использование программы чтения XML и простой просмотр документа - вот путь.
Показать ещё 1 комментарий

1 ответ

0

Да, вы можете выполнить рекурсивное сопоставление регулярных выражений. Здесь один указатель на How: Rexegg regex-recursion. И есть ответ SO для рекурсивного регулярного выражения Ruby

Ещё вопросы

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