Matcher
Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查,此类的实例用于多个并发线程是不安全的。
Matcher类的构造方法是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例。
获取Matcher实例
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的
Pattern pattern()
pattern()返回parentPattern,返回由此匹配器解释的模式,即构造器传入的Pattern对象。
int groupCount()
返回此匹配器模式中的捕获组数。根据惯例,零组表示整个模式。
String group()
返回当前查找而获得的与组匹配的所有子串内容。group()实际调用了group(int group)方法,参数group为0。组零表示整个模式。
String group(int group)
返回当前查找而获得的与组匹配的所有子串内容。
int start()
返回当前匹配的子串的第一个字符在目标字符串中的索引位置 。start()方法返回的是匹配器的状态first。
int start(int group)
返回当前匹配的指定组中的子串的第一个字符在目标字符串中的索引位置 。
int end()
返回当前匹配的子串的最后一个字符的下一个位置在目标字符串中的索引位置 。end()方法返回的是匹配器的状态last。
int end(int group)
返回当前匹配的的指定组中的子串的最后一个字符的下一个位置在目标字符串中的索引位置 。
boolean find()
在目标字符串里查找下一个匹配子串。如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。
boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式,从指定的位置开始查找下一个匹配的子串。如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。
int regionStart()
报告此匹配器区域的开始索引。end()方法返回的是匹配器的状态from。
int regionEnd()
报告此匹配器区域的结束索引(不包括)。end()方法返回的是匹配器的状态to。
Matcher region(int start,int end)
设置此匹配器的区域限制。重置匹配器,然后设置区域,使其从 start 参数指定的索引开始,到 end 参数指定的索引结束(不包括end索引处的字符)。
boolean lookingAt()
从目标字符串开始位置进行匹配。只有在有匹配且匹配的某一子串中包含目标字符串第一个字符的情况下才会返回true。
boolean matches()
只有完全匹配时才会返回true。
Matcher appendReplacement(StringBuffer sb, String replacement)
将当前匹配子串替换为指定字符串,并将从上次匹配结束后到本次匹配结束后之间的字符串添加到一个StringBuffer对象中,最后返回其字符串表示形式。
StringBuffer appendTail(StringBuffer sb)
将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。
String replaceAll(String replacement)
将匹配的子串用指定的字符串替换。
String replaceFirst(String replacement)
将匹配的第一个子串用指定的字符串替换。
Matcher usePattern(Pattern newPattern)
更改匹配器的匹配模式。
注意
- Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
- 一个Matcher实例是被用来对目标字符串进行基于既有模式(也就是一个给定的Pattern所编译的正则表达式)进行匹配查找的,所有往Matcher的输入都是通过CharSequence接口提供的,这样做的目的在于可以支持对从多元化的数据源所提供的数据进行匹配工作。
DEMO
@RunWith(SpringJUnit4ClassRunner.class)
@Slf4j
public class TestInfo {
public static final String P_UNCAP = "【客户档案:(?<name>.*)】";
public static final String DATE_STRING = "【客户档案:湖南省银华棉(麻产)业集团股份公司】";
@Test
public void testInfo() {
try {
Pattern pattern = Pattern.compile(P_UNCAP);
Matcher matcher = pattern.matcher(DATE_STRING);
boolean b = matcher.find();
String clientName = matcher.group("name");
System.out.println(clientName);
} catch (Exception e) {
e.printStackTrace();
}
}
}