java中的正则表达式模式匹配

java中的正则表达式模式匹配,java,regex,Java,Regex,我想在Java中匹配字符串的模式。字符串的格式如下所示 “插入%ABC%%DEF%” 我希望能够在两组“%”之间获取字符串ABC和DEF public void parseInput(String input){ Pattern p = Pattern.compile("?: .* %(.*)%)*"); Matcher m = p.matcher(input); String s1 = m.group(1); String s2 = m.group(2); }

我想在Java中匹配字符串的模式。字符串的格式如下所示

“插入%ABC%%DEF%”

我希望能够在两组“%”之间获取字符串ABC和DEF

public void parseInput(String input){
    Pattern p = Pattern.compile("?: .* %(.*)%)*");
    Matcher m = p.matcher(input);
    String s1 = m.group(1);
    String s2 = m.group(2);
}

到目前为止,我一直在玩,并继续得到语法错误。在本例中,这是我最近的一次尝试,得到了一条悬空的元字符错误消息

,您可以使用
.find()
方法,该方法将继续检查字符串并生成它所发现的内容:

    String str = "INSERT %ABC% %DEF%";
    Pattern p = Pattern.compile("%(.*?)%");
    Matcher m = p.matcher(str);
    while(m.find())
    {
        System.out.println(m.group(1));
    }
收益率:

ABC

DEF


编辑:正如供参考的那样,有这样一种模式:
%(.*)%%
,将使正则表达式变得贪婪,这意味着一旦找到最后一个
%
,它将停止匹配(从而产生
ABC%%DEF
)。在
*
运算符之后添加
运算符(根据我的示例)将使您的模式不贪婪,并且它将在找到的第一个
%
处停止。

您可以使用
.find()
方法,该方法将继续遍历字符串并生成它找到的内容:

    String str = "INSERT %ABC% %DEF%";
    Pattern p = Pattern.compile("%(.*?)%");
    Matcher m = p.matcher(str);
    while(m.find())
    {
        System.out.println(m.group(1));
    }
收益率:

ABC

DEF


编辑:正如供参考的那样,有这样一种模式:
%(.*)%%
,将使正则表达式变得贪婪,这意味着一旦找到最后一个
%
,它将停止匹配(从而产生
ABC%%DEF
)。在
*
操作符之后添加
操作符(根据我的示例)将使您的模式不贪婪,它将在找到的第一个
%
处停止。

啊,谢谢!这很有效。也不知道贪婪和非贪婪规则的区别expressions@Nopiforyou:不客气。贪婪是使用
*
+
运算符时需要注意的问题。啊,谢谢!这很有效。也不知道贪婪和非贪婪规则的区别expressions@Nopiforyou:不客气。贪婪是使用
*
+
运算符时需要注意的事项。