Хммм ... Это то, что я делаю. Это 1,5 года работы - ола. Этот reg-ex был проверен (используется мной) почти год. Это работает ... в основном ... Примечание: есть один случай, который на самом деле не является ошибкой, но является дискуссионным .... Он не будет соответствовать атрибуту, который сформулирован так: <A HREF = "http://url.com/dir..">
где между равными и значением атрибута есть пробел . Обратите внимание на шаблон WHITESPACE-EQUALS-WHITESPACE .... Это легко модифицируемый, но не правильный HTML.
Я надеюсь, что это ответит на вопрос, который вы задали, если нет - прокомментируйте. Я думаю, что вы спрашиваете о получении атрибутов из тегов HTML. Верный? Ваш reg-ex посмотрел именно то, на что я смотрел долгое время ...:)
Вот как получить значение атрибута HTML:
public static final Pattern P3 = Pattern.compile( "(" +
"[\\w-]+=\"[^\"]*?\"" + "|" +
"[\\w-]+='[^']*?'" + "|" +
"[\\w-]+=[\\w-]*" + "|" +
"[\\w-]+" + "|" +
"\\s+" + "|" +
"[^>]+" + ")",
Pattern.DOTALL );
Вот совпадение HTMLрегулярное выражение ... (не часть ответа на ваш вопрос, надеюсь, вы не против!)
public static final Pattern P1 = Pattern.compile
("<\\/?(\\w+)" +
"(?:" + "[\\w-]+=\"[^\"]*?\"" + "|" // attribute="any valid string, without (the same) quote"
+ "[\\w-]+='[^']*?'" + "|" // attribute='any valid string without (the same) quote'
+ "[\\w-]+=[\\w-]*" + "|" // attribute=any-valid-string-no-spaces-or-punctuation-etc
+ "[\\w-]+" + "|" // attribute
+ "\\s+" + "|" // any white-space
+ "[^>]+" + ")*" // Any miscellaneous characters ("Junk?"), *EXCEPT* a "greater-than"
// (MUST be THE LAST or-option)
// NOTE: The above "|" (or-branch), *MUST* be at the end... or else
// It will match everything, (except '>'), and miss the whole point.
// (Specifically, the first three attribute-value pair clauses are
// how to avoid the greater-than-within-tag problem!!!
+ "\\/?>", // Ending-HTML-Tag symbol is a "greater-than" or "slash-greater-than"
Pattern.DOTALL );