2015-08-05 2 views
2

Здравствуйте, у меня возникла проблема с использованием регулярного выражения с Java.Regex with matcher возвращает только первый результат

Я пытаюсь разобрать этот:

*whatever string* 
<AttributeDesignator AttributeId="MyIDToParse" 
DataType="http://www.w3.org/2001/XMLSchema#string" 
Category="theCategoryIWantToParse" 
MustBePresent="false" 
/> 
*whatever string ***that may contain the same regular expression again*** * 

с помощью этого кода (Pattern + Сличитель)

 Pattern regex = Pattern.compile("AttributeDesignator AttributeId=\"(.+?)\".*Category=\"(.+?)\"", Pattern.DOTALL); 

    Matcher matcher = regex.matcher(xml); 
    while (matcher.find()) { 
    String ID = matcher.group(1); 
    String Category = matcher.group(2); 

Моя проблема заключается в том, что мои регулярное выражение возвращает только первое вхождение шаблона, даже если у меня есть время (matcher.find()).

ответ

3
Pattern regex = Pattern.compile("AttributeDesignator +AttributeId=\"(.+?)\" +.*?Category=\"(.+?)", Pattern.DOTALL); 

Используйте не жадные, а не жадные кванторы.

0

Ваша проблема * Категория = \ "(. +) Catcches все оставшиеся текст. Вы должны закрыть его, как категории = \" (. +) \».