Regex: шаблон, соответствующий многострочному вводу - PullRequest
1 голос
/ 06 февраля 2012

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

Пример Inputtext:

<title>Example Title</title><br />
<link>Download:</link> <a href="URL">hier</a> | hoster1 <br />
<link>Download:</link> <a href="URL">hier</a> | hoster2 <br />
<link>Download:</link> <a href="URL">hier</a> | hoster3

Название, хостер и URL, конечно, могут измениться, и их будет интересно узнать, поэтому моя попытка была примерно такой:

<title>([^<]+?)</title><br />\s<link>Download:</link> <a href="([^"]+?)">hier</a> \| ([^<]+?)<br />\s

Эти группы могут показаться немного глупыми, но я тоже пытался (. *?) и даже в режиме lazy-mode он будет просто соответствовать целым строкам.

  1. Прямо сейчас вторая часть (часть ) будет совпадать, но не в сочетании с единицей ,Я предполагаю, что мой символ пробела не совпадает с новой строкой?Как проверить ТОЛЬКО символ новой строки?

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

    [ <link>Download:</link> <a href="([^"]+?)">hier</a> \| ([^<]+?)<br />\s ]*

Все это делается с помощью набора опций MULTILINE (Althought я не слишкомконечно, это нужно для того, что я хочу сделать).

Я пробую несколько разных вещей уже несколько дней и никуда не денусь, я бы очень признателен за несколько указателей в правильном направлении, спасибо.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Используйте правильный синтаксический анализатор HTML, такой как jsoup для такого рода задач; регулярные выражения хороши для очень простых случаев, но быстро станут громоздкими. Анализатор HTML будет намного быстрее, проще и правильнее в реализации, особенно когда вы начнете проводить более сложное тестирование.

0 голосов
/ 06 февраля 2012

Просто добавьте [^\r\n] везде, где вам нужен новый линейный символ для Windows, в противном случае используйте [^\n].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...