正则表达式(Pattern类):
提供大量的用于匹配字符串的规则以及语法
java.util.regex 工具包下
1.
String str="abc";//待匹配的字符串 //1.指定匹配规则 Pattern p=Pattern.compile("abc");//匹配只有abc的字符串 //2.关联待匹配的字符串 --输入要匹配的字符串 Matcher m=p.matcher(str); //3.进行匹配 System.out.println(m.matches());
2.
String str="abc";//待匹配的字符串 System.out.println(str.matches("abc"));
正则规则:
[] 里面内容任取一个[abc],也可以表示范围,任取一个[0-9]
+ 去控制前面的字符出现的次数,最少出现一次
?去控制前面的字符出现的次数 ,最多出现一次
*去控制前面的字符出现的次数 可以不出现也可以出现多次
字符{数值} -----表明字符串只出现了字符的数值于出现的次数,很精确的那种
{n,m} 出现的次数是n到m范围之内
{n,}出现的次数连续的最小是n次 {,n}这个是不行的,可能会有负数
()捕获组 \n就是捕获组的编号
System.out.println(str.matches(".*(ab).*\1.*"));
捕获组的编号---从( 就开始编号
(a(c(d)e)b)f(g)
编号
1 a(c(d)e)b
2 c(d)e
3 d
4 g
String str="chk"; //匹配abc/cfh/lkn 每一组任取一个组成的字符串 System.out.println(str.matches("[abc][cfh][lkn]"));//true //匹配除x/u/k之外的字符串 ,[] 里面的内容任取一个 表示范围,任取一个 System.out.println(str.matches("[^xuk]"));//true //d表示的是任意的数字,但是字符串要转义一次,所以是\d,字符串转义好给正则就是d String str2="1"; System.out.println(str2.matches("\d")); //. 任意字符 String str3="i"; System.out.println(str3.matches(".")); //匹配点 \. 字符串转义后. 正则转义后. String str4="."; System.out.println(str4.matches("\.")); //匹配 \\-字符串转义 \ 正则表达式转义\ 这个字符串自身的转义 String str5="\"; System.out.println(str5.matches("\\")); //匹配/t String str6=" "; System.out.println(str6.matches(" ")); //这种不是\的,可以用 ,\t,\ 匹配 //Demo 1 匹配开头是数字,结尾是小写英文字母,最少3个字符组成的字符串 System.out.println(str6.matches("[0-9].+[a-z]")); //Demo2 匹配小写英文字母开头,数字结尾,最多3个字符组成的字符 System.out.println(str6.matches("[a-z].?\d")); //Demo3 匹配以abc中任意一个开头,以数字结尾的字符串 System.out.println(str6.matches("[abc].*\d")); //Demo4 匹配aaaaa的字符串 System.out.println(str6.matches("a{5}")); //Demo5 字符最少出现5次 没有最大区间a{,5},会去到负数所以不允许,最小区间是可以的 System.out.println(str6.matches("a{5,}")); //{n,m} 字符出现的次数是n到m范围之内 System.out.println(str.matches("a{1,5}"));
7
String str="a_es24441gab"; System.out.println(str.replaceAll("\d", "*"));//a_es*****gab
[]------\[] \[\] [165165]------------- \[|\]
//输出每个字符出现的个数; String str="a_es24441gab"; while(str.length()>0) { int length=str.length(); //获取第一个字符 char a=str.charAt(0); //判断是否是特殊字符,这个需要转义的 str=str.replaceAll(a+"",""); System.out.println(a+" :"+(length-str.length())); } }
捕获组和使用捕获组不在一个表达式中只能用&n去使用其他的捕获组
String str="TOM441JERRY";
System.out.println(str.replaceAll("(TOM)(.*)(JERRY)", "$3$2$1"));
String str2="abab"; String str="我我我爱爱爱学学学习习习"; System.out.println(str.replaceAll("(.)\1+(.)\2+(.)\3+(.)\4+", "$1$2$3$4"));//我爱学习 System.out.println(str.replaceAll("(.)+(.)+(.)+(.)+", "$1$2$3$4"));//学习习习 System.out.println(str.replaceAll("(.*)\1+", "$1"));//我爱学习 System.out.println(str2.matches(".*(ab).*\1")); //true
叠词好为一组
8.splite
String str="966我我我244爱爱爱1学学学9习习习899"; System.out.println(str.replaceAll("(.)\1*", "$1"));//96我24爱1学9习89
//以匹配到的信息(分隔符)进行分割生成一个字符串数组 //分隔符在字符串首字符就切出个空串,在后面就切掉了 //如果前面出现多少个切割符就切除多少个空串,后面的还是全切掉 //如果切割符在中间出现多次也会切出多个空串 String[] ss=str.split("\d"); System.out.println(Arrays.toString(ss)); //[, , , 我我我, , , 爱爱爱, 学学学, 习习习]