Perl Regex Help - надеюсь, простой вопрос - PullRequest
1 голос
/ 22 июня 2011

Мне стыдно признаться, я ужасно с регулярным выражением ... так что здесь я должен попросить вашей помощи:)

У меня есть HTML-файл, который выглядит примерно так:

<table>
  <tr>
    <td sadf="a">
      <a href="">asdf</a>
    </td>
  </tr>
</table>

Что бы я хотел сделать с помощью регулярного выражения Perl, это удалить все , кроме для всего в теге td. поэтому я хотел бы, чтобы выходные данные были такими:

<td sadf="a">
  <a href="">asdf</a>
</td>

пожалуйста, помогите мне. Спасибо

Ответы [ 3 ]

3 голосов
/ 22 июня 2011

HTML-парсер был бы намного лучше в этой задаче, но если вы настаиваете на использовании регулярного выражения, попробуйте это:

<td[\s\S]*?</td>

Соответствует как можно меньшему числу символов до конечного тега </td>.

3 голосов
/ 22 июня 2011

Попробуйте использовать XML :: Simple . Как уже отмечали другие, вы не можете использовать регулярные выражения для анализа XML.

XML::Simple превратит ваш HTML в хеш-структуру. Оттуда вы можете легко найти элемент "td" и скопировать все это в другую ссылку на хеш. Затем вы можете использовать XML :: Simple, чтобы превратить его обратно в HTML.

XML :: Simple не может гарантировать одинаковую структуру в XML (хотя программно это будет одинаково). Однако у меня редко возникают проблемы с преобразованием HTML в хэш-ссылку и обратно в HTML.

1 голос
/ 22 июня 2011

Проще говоря, вы хотите захватить часть тега регулярным выражением (а не удалять все, кроме части тега).

В этом случае регулярное выражение простое и, вероятно, будет выглядеть примерно так для первой строки, например: <td \w+?="\w*"> (вы можете сопоставить \ n, чтобы получить многострочный блок). Трудно ответить, не зная точно, что меняется в вашем регулярном выражении, но если вы будете следовать ссылке, такой как эта , у вас все будет хорошо.

Кроме того, вероятно, лучше всего делать это вообще без регулярных выражений (вообще с использованием HTML-парсера), если это нечто большее, чем ограниченный, специфический захват. Я предполагаю, что вы знаете, что хотите использовать регулярные выражения, но есть действительно намного лучшие способы сделать это, если у вас есть что-то более сложное, чем очень простой шаблон поиска в ваших руках.

...