为什么需要Pattern?
Pattern
类是一个编译过的正则表达式,表示一个正则表达式的模式。在Java中,当你需要多次使用同一个正则表达式进行匹配、查找或替换操作时,使用Pattern
对象可以提高效率。它是java.util.regex
包的一部分,这个包提供了对正则表达式的支持。当你第一次调用Pattern.compile(String regex)
方法时,它会将正则表达式编译成一个Pattern
对象,这个编译过程可能需要一些时间,但一旦完成,你就可以使用这个Pattern
对象多次进行匹配,而不需要每次都重新编译正则表达式。
compile方法的作用
compile
方法是Pattern
类的一个静态方法,它接受一个字符串参数,该字符串代表要编译的正则表达式。这个方法的作用是将传入的正则表达式字符串编译成一个Pattern
对象。编译后的Pattern
对象可以被用来创建一个或多个Matcher
对象,这些Matcher
对象可以对输入的字符串进行匹配操作。
具体来说,compile
方法的作用包括:
- 解析正则表达式:解析传入的字符串,验证它是否是一个有效的正则表达式。
- 编译正则表达式:将正则表达式转换成一种内部表示形式,这种表示形式可以被
Matcher
类高效地使用。 - 创建Pattern对象:基于编译后的正则表达式,创建一个
Pattern
对象,这个对象可以被用来进行匹配操作。
示例代码解析
在你提供的示例代码中:
String content = "acc111811223dfdf";
String regStr = "\\d{4}";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:" + matcher.group(0));
}
regStr
是一个字符串,表示了一个正则表达式,用于匹配恰好4位的数字。Pattern.compile(regStr)
调用了compile
方法,将regStr
编译成一个Pattern
对象。pattern.matcher(content)
创建一个Matcher
对象,该对象可以对字符串content
进行匹配操作,查找与正则表达式\d{4}
匹配的部分。
通过这种方式,你可以对字符串content
进行多次匹配操作,而不需要每次都重新编译正则表达式。
Matcher 类:
Matcher
类是对输入字符串进行解释和匹配操作的引擎。它提供了丰富的操作接口,比如查找、替换等,用于执行各种匹配操作。Matcher
对象是通过调用Pattern
对象的matcher(CharSequence input)
方法创建的,该方法返回一个Matcher
对象,该对象可以对指定的输入字符串进行匹配操作。
-
Matcher.find():
- 这是
Matcher
类的方法,用于在输入字符串中查找与模式匹配的子序列。 - 如果匹配成功,则
find
方法返回true
,并且可以通过group()
方法获取匹配的子序列。如果匹配失败,则返回false
。 find
方法默认从字符序列的开头开始查找,每次调用find
方法都会从上一次匹配成功的位置之后继续查找。
- 这是
-
Matcher.group(int group):
- 这是
Matcher
类的方法,用于返回与正则表达式中的捕获组相匹配的子序列。
- 参数
group
是一个整数,表示要返回的捕获组的索引。捕获组是通过在正则表达式中使用圆括号括起来的子表达式来定义的。 - 如果
group
参数为0,或者没有指定参数,则group
方法返回整个匹配的子序列。 - 如果在当前的匹配中没有找到与给定索引相对应的捕获组,则
group
方法将抛出IllegalStateException
。
代码执行流程
- 编译正则表达式
"\\d{4}"
,得到一个Pattern
对象pattern
。 - 使用
pattern
对象的matcher
方法为输入字符串content
创建一个Matcher
对象matcher
。 - 使用
matcher
对象的find
方法在输入字符串中查找与正则表达式匹配的子序列。 - 如果找到匹配项,使用
matcher
对象的group(0)
方法(或简单地group()
,因为默认索引为0)返回匹配的子序列,并打印出来。 - 重复步骤3和4,直到没有更多的匹配项。
这样,代码就会输出输入字符串中所有与正则表达式"\\d{4}"
匹配的4位数字序列。