概念

正则表达式

在阅读本文前,你应该已经了解了正则表达式的基本概念以及如何书写正则表达式。如果对正则表达式不是太了解,或者想更深入地了解正则表示式,请点击这里

捕获组

捕获组能够让我们方便地从正则表达式中提取出我们需要的内容。捕获组根据字符出现的顺序,从左往右开始进行编号。例如正则表达式((A)(B(C))), 其捕获组分别为:

  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)

一个捕获组通常是用括号包起来的部分,其中整个正则表示式是第一个捕获组,可以选择用括号包起来,也可以不用括号。除第一个捕获组之外,其他捕获组都需用括号包起来。

详解Java正则表示式的使用

包简介

java.util.regex包中有一个interface,两个class和一个exception,分别是

  • MatchResult
  • Pattern
  • Matcher
  • PatternSyntaxException

其中,MatchResult是interface, Matcher实现了这个interface。Pattern和Matcher是class,Pattern是一个正则表达式经编译后的表现模式,Matcher是一个状态机器。

Pattern

compile(String regex) / compile(String regex, int flags)

静态方法,把一个正则表示式编译后,生成一个Pattern对象实例

Pattern p = Pattern.compile("\\d{2}");
p.pattern();  //返回 \d{2}

matcher(CharSequence input)

生成一个Matcher对象。Matcher类时不能直接实例化的,可以通过此方法实例化一个Matcher对象,从而进行各种操作。

split(CharSequence input) / split(CharSequence input, int limit)

使用正则表示式,进行字符串分割

Matcher

find() / find(int start) / lookingAt()/matches()

进行匹配操作,如果匹配成功,这三个方法都会返回true.其中,find()是在源字符串中找出和正则表达式匹配的字符串。find(int start)是从start位置开始寻找下一个匹配的字符串。lookingAt()是从源字符串的第一个字符进行匹配。matches()是对整个源字符串中进行匹配,如果都匹配才返回true。

String str="abcd23"

Pattern.matches("\\w{4}\d{2}",str); //快捷方式

Pattern p = Pattern.compile("\\w{4}\d{2}");
Matcher m = p.matcher(str); //和上面的方法等价
m.matches();

group() / start() / end()

当使用find() / find(int start) / lookingAt() / matches()进行匹配操作并返回true之后,才可以执行者三个方法获取更加详细的信息。
group():返回匹配到的字符串
start():返回匹配到的字符串在源字符串中的位置
end(): 返回匹配到的字符串的最后一个字符在源字符串中的位置
另外这几个方法分别有一个重载方法 group(int i) / start(i) / end(i), 分别用于对第i个捕获组进行对应的操作

replaceAll(String replacement) / replaceFirst(String replacement)

替换源字符串中和正则表达式匹配的子字符串。其中replaceAll是替换所有的,replaceFirst是替换第一个匹配的。


luckyqiao
214 声望9 粉丝