JAVA正则表达式,matcher.find()和 matcher.matches()的区别
由于在开发过程中碰到了需要使用正则表达式去替换特殊的内容,所以将所学到的记录下来!
待替换的字符串
String str = "拿杯[温度]的[水]"
刚开始的思路是准备找出 “[” 和 “]” 的下标,然后再用 substring 截取获得中括号中的内容。后来发现当中括号多起来的时候这个方法就失效了!
其实之前是有用 java.util.regex.Pattern
, java.util.regex.Matcher
,不过太久没用,有点忘记了哈哈哈…
>> Pattern 和 Matcher
在 java.util.regex
包下
Pattern
(模式类):用来表达和陈述所要搜索模式的对象。Pattern.compile(pattern) pattern 也就是要匹配的正则表达式Matcher
(匹配器类):真正影响搜索的对象。上面Pattern.compile(pattern)
得到一个Pattern
对象 为r
。r.matcher(line)
line
也即是你需要进行匹配的字符串 。这样会得到一个Matcher
的对象。PatternSyntaxException
:当遇到不合法的搜索模式时,会抛出例外
>> 解决
public static String processStr(String str,IntentEntity intent) {
//正则表达式:获取[]中的内容
String regex = "\\[(.*?)]";
Pattern pattern = Pattern.compile(regex);
//查找str中匹配的字段
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
str = str.replace("[" + matcher.group(1) + "]", "${slot1}");
}
return str;
}
- find():尝试查找与模式匹配的输入序列的下一个子序列
- group(int group):返回在上一次匹配操作期间给定组捕获的输入子序列
解释:
-
Matcher
类中group(0)
或者group()
表示正则表达式中符合条件的字符串。 -
Matcher
类中group(1)
表示正则表达式中符合条件的字符串中的第一个 []中的字符串。 -
Matcher
类中group(2)
表示正则表达式中符合条件的字符串中的第二个 [] 中的字符串。 -
Matcher
类中group(3)
表示正则表达式中符合条件的字符串中的第三个 [] 中的字符串。
>> 结果
拿杯${str1}的${str2}