Regex для извлечения id и значения - PullRequest
1 голос
/ 07 февраля 2012

У меня есть элемент ввода html, из которого мне нужно извлечь имя и значение с помощью двух отдельных регулярных выражений (Java).

<INPUT type="hidden" id="Region" value="Circuits Japan" checked="false">

Мне нужно извлечь Region и Circuits Japan сверху, используя 2 различных регулярных выражения.

Для извлечения идентификатора я использовал что-то вроде этого .*id=(.[^"]+), и это дает мне

Region value=Circuits Japan checked=false>

, тогда как я пытаюсь извлечь только "Регион".Любые материалы будут высоко оценены.

Приветствия: -)

Ответы [ 4 ]

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

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

<INPUT type="hidden" id="Region" value="Cirvuits Japan" checked="false">

, затем используйте:

Pattern p = Pattern.compile( " id=\"(.*?)\" value=\"(.*?)\"" );
Matcher m = m.matcher( inputString );
if ( m.find() ) {
    String id = m.group(1);
    String value = m.group(2);
    ...
}

Если вы не можете контролировать кавычкипросто используйте:

Pattern p = Pattern.compile( " id=(.*?) value=(.*?) checked=" )
...
1 голос
/ 07 февраля 2012

Если не указано иное, оператор + является жадным ... это означает, что он будет совпадать настолько, насколько возможно. В вашем случае это означает, что он идет до последнего ". чтобы совпадение + не было жадным, добавьте следующее ?. E.g.:

.*id=(.[^"]+?)

Тогда вы должны получить ожидаемое значение.

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

Прежде всего: синтаксический анализ атрибутов html с использованием одного регулярного выражения сделать сложно, потому что порядок атрибутов может варьироваться.Если вы хотите сделать несколько проходов, это не так сложно.Учитывая, что у вас нет ", тогда регулярное выражение для идентификатора будет:

id=(\\S+)

Конечно, вы не можете анализировать несколько атрибутов слов, как это.Вам нужно будет " просто для правильного представления таких атрибутов.Предполагая, что у вас есть атрибут multiword с ", вы должны использовать:

someAttribute=\\"([^"]+)

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

рассматривали ли вы Apacke Tika , здесь - это блог, в котором показано, как его использовать.

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