一.正则表达式的构造
1.特殊符号
符号 说明 [] 中括号括起来的部分只表示一个字符,中括号中的内容表示可选范围 - 表示一个包含起始和结束的范围,在中括号内使用 ^ 用在中括号内表示排除项 ,用在中括号外表示匹配开始位置 $ 匹配结束位置 () 用于分组,并提高优先级 \ 转义特殊字符,也可以跟数字搭配使用捕获分组 | 表示或者
2.单字符
规则 说明 [abc] a或b或c [^abc] 匹配除了a丶b丶c以外的字符 [a-z] 匹配a-z之间的字符,即所有小写字母 [A-Z] 匹配A-Z之间的字符,即所有大写字母 [A-z] 匹配A-z之间的字符,即所有字母 [0-9] 匹配0-9之间的字符,即所有单个数字
3.元字符
规则 说明 . 所有字符(行结束符除外,慎用) \w 匹配单词字符(字母丶数字丶下划线) \W 匹配非单词字符 \d 匹配数字 \D 匹配非数字 \s 匹配空白字符 \S 匹配非空白字符 \b 匹配单词边界 \B 匹配非单词边界
4.量词
规则 说明 ? 一个或零个 * 零个或多个 + 一个或多个 {X} 固定X个 {X,} 大于等于X个 {X,Y} X个到Y个
4.嵌入式表达式
规则 说明 (?i) 在其后面的字母忽略大小写 (?m) 多行匹配,一般放在最前面,需要配合^或$使用,表示每行内容都用正则表达式去匹配 (?s) 在其后面使用.可以匹配所有字符,包括行结束符
( ? i) AbC \dD
( ? m) ^ \w\d$
( ? s) .
二.Java使用正则表达式
1.字符串类
校验字符串是否匹配正则表达式public boolean matches(String regex)
matches方法匹配的地方包括的开头和结尾,等同于在正则表达式头尾分别增加了^和$
String regex = "[abc]" ;
String str1 = "b" ;
String str2= "bc" ;
System . out. println ( str1. matches ( regex) ) ;
System . out. println ( str2. matches ( regex) ) ;
根据正则表达式进行替换public String replaceAll(String regex,String replacement)
从左到右匹配,匹配成功则替换,剩下未匹配部分继续匹配(已替换或已匹配部分不再进行后面的匹配)
String str= "aaabbb" ;
String str2= str. replaceAll ( "ab" , "c" ) ;
System . out. println ( str2) ;
String str3= str. replaceAll ( "aa" , "dd" ) ;
System . out. println ( str3) ;
使用正则表达式对字符串分割成数组public String[] split(String regex)
String str= "我...是一名..程..序...员" ;
String [ ] arr= str. split ( "\\.{2,3}" ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
System . out. print ( arr[ i] ) ;
}
2.Pattern类
将指定正则表达式编译到模式中public static Pattern compile(String regex)
根据指定字符串创建匹配器public Matcher matcher(CharSequence input)
编译指定正则表达式并尝试匹配字符串public static boolean matches(String regex,CharSequence input)
匹配的地方包括的开头和结尾,等同于在正则表达式头尾分别增加了^和$
//等同于String类的matches方法
boolean b1= Pattern.matches("[1-5]", "3");
boolean b2= Pattern.matches("[1-5]", "34");
System.out.println(b1); //true
System.out.println(b2); //false
3.Matcher类
尝试匹配public boolean matches()
匹配的地方包括的开头和结尾,等同于在正则表达式头尾分别增加了^和$ 查找匹配,匹配成功则把指针往后移 public boolean find()
返回匹配器最近一次匹配的值 public String group()
需要先调用find()
,group()
才能获取值
String str="3a2b1c";
String regex="[0-9]";
//1.把正则表达式编译成模式
Pattern p=Pattern.compile(regex);
//2.根据被匹配的字符串创建匹配器
Matcher m=p.matcher(str);
//3.循环查找匹配
while(m.find()){
//4.返回上一次匹配成功的值
String r=m.group();
System.out.println(r);
}
//输出:321
三.分组
1.正则表达式
使用小括号括起来的为一组 从左边小括号(
开始计算组号,从1开始 使用\组号
获取指定组的匹配值并在正则表达式中使用(等同于复制值)
( A ) \\1 ( B ) \\2 ( C ) \\3 \\1 \\2 \\3
2.java获取分组值
根据指定组号返回匹配器最近一次匹配的值 public String group(int group)
当参数不填时,默认为0,整个表达式为一组,组号为0,即获取的是匹配到的整个表达式的值 其他组的编号从1开始,即第一个()编号为1,第二个()编号为2…
String regex= "([A-z])\\1([A-z])\\2([A-z])\\3\\1\\2\\3" ;
String str= "AABBCCABC" ;
Pattern p= Pattern . compile ( regex) ;
Matcher m= p. matcher ( str) ;
while ( m. find ( ) ) {
System . out. println ( m. group ( 0 ) ) ;
System . out. println ( m. group ( 1 ) ) ;
System . out. println ( m. group ( 2 ) ) ;
System . out. println ( m. group ( 3 ) ) ;
}