Нужен регулярный expr. для элемента HTML, где порядок атрибутов не имеет значения - PullRequest
0 голосов
/ 21 февраля 2010

Мне нужно регулярное выражение, чтобы обнаружить элемент span, где порядок id и class не имеет значения. Имя класса всегда одинаковое, идентификатор всегда является фиксированным числом цифр, например:

<span class="className" id="123">

или

<span id="321" class="className" >

Мой подход к регулярному выражению в Java был:

String pattern = "<span class=\"className\" id=\"\\d*\">";

но я могу получить только одну версию. Может ли кто-нибудь помочь?

Спасибо, Ганза

Ответы [ 3 ]

7 голосов
/ 21 февраля 2010

Не разбирайте HTML с помощью регулярных выражений. HTML не обычный.

1 голос
/ 21 февраля 2010

Это должно сделать это:

String r = "<span (?=[^<>]*\\bclass=\"className\")[^<>]*\\bid=\"(\\d+)\"[^<>]*>";

Предварительный просмотр подтверждает, что диапазон имеет требуемый класс без использования каких-либо символов.Затем остальная часть регулярного выражения, начиная с той же позиции, ищет атрибут id и фиксирует его значение.[^<>]* заботится о любых других атрибутах, которые могут присутствовать, обеспечивая при этом все совпадения внутри тега.(Технически, угловые скобки могут появляются в значениях атрибутов, но вам, вероятно, об этом не нужно беспокоиться.)

0 голосов
/ 21 февраля 2010

Я бы сделал двухэтапную версию, сначала найдя тег span с помощью:

<span[^>]*class=\"classname\"[^>]*>

А затем вытащите идентификатор из тегов, которые соответствуют первому шаблону с

id=\"(\d+)\"

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

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