java正则表达式相关的类有:Pattern、Matcher、MacherResult
Pattern主要价值在于complie(),指定一个匹配的模式,可以指定该模式下的多个Matcher实例
Matcher作用在于匹配的动作,根据产生他的Pattern给他指定的模式去做匹配。
static Pattern compile(String regex, int flags)
增加flag参数的指定,可选的flag参数包括:CASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE, CANON EQ
Pattern:
Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); 等价于 boolean b = Pattern.matches("a*b", "aaaaab");
等价于Pattern.complie("a*b").matcher("aaaaab").matches();
Pattern一般需要配合Matcher使用,仅仅使用Pattern只能完成基础的匹配功能,就像上面的第二行的匹配。第二行的匹配正则表达式只能使用这一次,后面要使用还得compile,因此适用于仅仅使用一次的情况
方法:
split(CharSequence input)
split(CharSequence input,int linit) 这个是String.split()方法的底层的实现方法 ,limit为指定将字符串最多分割成几段
Pattern.matcher(CharSequence input) 返回Matcher方法
Matcher:Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false
1,Matcher.matches() matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
2,Matcher.lookingAt() 从输入的头开始找,只有字符串的前缀满足模式才返回true
3,Matcher.find() find()对字符串进行匹配,匹配到的字符串可以在任何位置.
Mathcher的find和lookingAt()方法执行成功之后,会影响后续的find的执行,因为下一次find会从上次匹配成功的位置开始继续查找,如果不想这样可以使用reset()方法复原匹配器的状态。
Pattern pattern=Pattern.compile("[a-z]{3,5}"); Matcher matcher=pattern.matcher("eee12wqe43ewe22qqq12s33"); while (matcher.find()){ System.out.println(matcher.group()); }
Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
这三个方法记录了这个Matcher上一次匹配的详细的结果。如果匹配失败调用这三个方法就会报出异常
分组的应用!
start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
首先这些默认的start(),end(),group(),其实指的是start(0),end(0),group(0),指定的就是我们匹配到的整个子序列。
捕获组是从 1 开始从左到右的索引。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()
start(),end(),group(),start(int i),end(int i),group(int i),groupCount()
都是MatcherResult接口中的方法,Matcher实现了MatcherResult接口
其他一些不常用的方法:
m.usePattern(Pattern newPattern)
更改为新的模式
m.pattern() 返回产生他的pattern类
String replaceAll(String replacement)
将目标字符串里与既有模式相匹配的子串全部替换为指定的字符串。
String replaceFirst(String replacement)
将目标字符串里第一个与既有模式相匹配的子串替换为指定的字符串。
Matcher reset()
重设该Matcher对象。
d 数字: [0-9]
D 非数字: [^0-9]
s 空格符: [
x0Bf
]
S 非空格符: [^s]
w 单词字符: [a-zA-Z_0-9]
W 非单词字符: [^w]
方括号的正则表达式,只能匹配单个字符。
匹配多个字符时使用圆括号“()”。比如使用“t(a|e|i|o|oo)n”正则表达式,这里的() 事实上也形成了一个分组。就是()本身是分组的意义,中间加上|就有了匹配多个字符的意义