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

Regex with matcher returning only the first result

您好,我在 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 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);

我的问题是我的正则表达式 returns 只是模式的第一次出现,即使我有一段时间 (matcher.find())..

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

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

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