2015-06-07 3 views
-2

Допустим, что я получаю текст и мне нужно иметь некоторое регулярное выражение на нем, который идет следующим образом:Как узнать, сколько групп я получу с помощью регулярных выражений?

String aContent = " title='111' title='222' "; 
Pattern pattern = Pattern.compile("\\s{1,}(title=){1}+(.){1,}'{1}"); 
Matcher matcher = pattern.matcher(aTagContent); 

И данные были найдены/согласованы с использованием find()

Как я могу знаете, сколько групп я предполагаю получить из этого регулярного выражения?
Я знаю, что есть matcher.groupCount(), так что это не тот ответ, который я ищу.

То, что я actully спрашиваю:

  • Как этот текст будет расщепляется? как я могу узнать, что без использования matcher.groupCount()?
+1

Чтобы знать, что вам нужно знать о своем вводе. В противном случае вы не сможете. –

+0

Это точно, но в этом вопросе есть несколько примеров, пожалуйста, ответьте на это, если вы можете –

+0

Я не могу понять ваш вопрос. Метод groupCount используется для подсчета групп. –

ответ

1

Matcher.groupCount() возвращает количество групп в вашем Pattern, а не в результате.

Matcher.matches() пытается сопоставить всю строку ввода с вашим шаблоном, Matcher.find() будет последовательно пытаться согласовать только часть вашей строки ввода. Последний обычно используется в while -loop, поэтому нет никаких предварительных сведений о количестве совпадений.

Вы можете удалить тривиальный квантор , он делает ваш шаблон чрезмерно подробным. Кроме того, {1,} может быть заменен на +. Первая цитата отсутствует в вашем шаблоне, поэтому она не будет соответствовать вашей входной строке. Может быть, что-то вроде это работает для вас:

Pattern pattern = Pattern.compile("\\s+(title)='([^']+)'"); 
Matcher matcher = pattern.matcher(" title='111' title='222' "); 

while (matcher.find()) { 
    System.out.println("attribute: " + matcher.group(1) + ", value: " + matcher.group(2)); 
} 

Вы можете рассмотреть возможность использования String.split("\\s") первого и перебрать возвращаемый массив String? По крайней мере, вы заранее узнаете количество пар атрибут-значение.

Смежные вопросы