java中的正则表达式模式匹配
我想在Java中匹配字符串的模式。字符串的格式如下所示 “插入%ABC%%DEF%” 我希望能够在两组“%”之间获取字符串ABC和DEFjava中的正则表达式模式匹配,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); }
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:不客气。贪婪是使用*
和+
运算符时需要注意的事项。