基础永远且肯定是有用的!
java.util.regex包里有接口MatchResult,两个类Matcher和Pattern,一个异常PatternSyntaxException。本文主要学习Matcher和Pattern。
Pattern:模式,正则表达式的编译表示形式。
创建Pattern实例:
public static Pattern compile(String regex)/public static Pattern compile(String regex,int flags):flags用于指定编译模式,有CASE_INSENSITIVE、MULTILINE、DOTALL、UNICODE_CASE、 CANON_EQ、UNIX_LINES、LITERAL 和 COMMENTS。
创建匹配器实例:
public Matcher matcher(CharSequence input):创建匹配器,要匹配的输入为input,模式为此模式。
简单实用方法:
public static boolean matches(String regex,CharSequence input):用于仅使用一次的模式匹配。
boolean b = Pattern.matches("a*b", "aaaaab");
String toString():返回此模式的字符串表示形式。
补:在创建模式的时候,可以通过小括号的使用指定模式分组。从左到右计算括号来对组进行编号。如((A)(B(C)))存在四个组:
1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C) 组0代表整个表达式。
如a(bc):组1为bc。组可以在Matcher中得到体现和使用。
Matcher:匹配器,通过解释Pattern对字符串执行匹配操作。
三种匹配操作:
boolean matches():将整个输入序列与模式匹配。
boolean lookingAt():从输入序列的起始处与该模式匹配,不需要匹配整个区域,找到可以匹配的前缀即可。
boolean find():查找与该模式匹配的下一个子序列。前一次调用成功后匹配器不重置,从以前未匹配的第一个字符开始下次匹配。
boolean find(int start):指定开始匹配的位置。
上述操作成功后,可调用start,end,group方法获得更多信息。start返回上次匹配的起始索引,end返回上次匹配后的偏移量-(end-1)是匹配结束的字符位置。group返回以前匹配操作所匹配的输入子序列。这三个方法都有一个带有参数(int group)的重载函数,指示用Pattern的哪一组进行匹配后的信息。
例子
Pattern pattern=Pattern.compile("a(bc)"); Matcher matcher=pattern.matcher("abcdefabcd"); matcher.find(); //bc匹配信息 String str1=matcher.group(1); int start_group1=matcher.start(1); int end_group1=matcher.end(1); //abc匹配信息 String str=matcher.group(); int start=matcher.start(); int end=matcher.end();
其他方法:
public Matcher region(int start,int end)设置此匹配器的区域限制。区域是输入序列的一部分。调用此方法会重置匹配器,然后设置区域,使其从 start 参数指定的索引开始,到 end 参数指定的索引结束。
int regionStart():此匹配器区域的开始索引。int regionEnd():此匹配器区域的结束索引(不包括)。