正则表达式与匹配器仅返回第一个结果

时间:2015-08-05 08:42:00

标签: java regex matcher

你好我在使用带有Java的正则表达式时遇到了问题。

我正在尝试解析这个问题:

*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 + Matcher)

        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())..

2 个答案:

答案 0 :(得分:3)

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

使用非贪婪而不是贪婪的量词。

答案 1 :(得分:0)

您的问题是* Category = \“(。+)捕获所有剩余的文本。 您必须将其关闭为Category = \“(。+)\”。