一,概述,初体验,匹配规则
1,正则表达式
就是由一些特定的字符组成,代表的是一个规则
2.书写规则
作用:用来校验数据格式是否合法
//1.字符类(只能匹配单个字符)
System.out.println("a".matches("[abc]"));//[abc]只能匹配a,b,c
System.out.println("a".matches("[^abc]"));//[^abc]不能是a,b,c
System.out.println("a".matches("[a-zA-Z]"));//[a-zA-Z]只能是a-z,A-Z的字符
System.out.println("a".matches("[a-z&&[^bc]]"));//a-z除了b,c
System.out.println("ab".matches("[a-zA-Z0-9]"));//false 注意:以上带[内容]的规则都只能用于匹配单个字符
//2.预定义字符(只能匹配单个字符) . \d \D \s \S \w \W
System.out.println("徐".matches("."));//.可以匹配任何字符
System.out.println("徐徐".matches("."));//false
// \在Java中有特殊意义,\n换行 \t代表一个缩进
System.out.println("3".matches("\\d"));// \d:0-9
System.out.println(" ".matches("\\s"));// \s:代表一个空白字符
System.out.println(" ".matches("\\S"));// \s:代表一个非空白字符
System.out.println(" ".matches("\\w"));// \w:[a-zA-Z0-9] \W就是非
//3.数量词 ? * + {n} {n,} {n,n}
System.out.println("a".matches("\\w?"));//?代表0次或1次
System.out.println("a".matches("\\w*"));//?代表0次或多次
System.out.println("a".matches("\\w{3}"));//{3}代表正好是三次
System.out.println("a".matches("\\w{3,}"));//{3,}代表>=3次
System.out.println("a".matches("\\w{3,9}"));//{3,9}代表>=3,<=9次
//4.其他几个常用的符号:(?!)忽略大小写,或:| 分组:()
System.out.println("abc".matches("(?!)abc"));
System.out.println("ABC".matches("(?!)abc"));//true
System.out.println("ABC".matches("a((?!)b)c"));//true
二,用于查找信息,用于搜索替换,分割内容
用于查找信息
作用:在一段文本中查找满足要求的内容
public static void method1(){
String data="电话:18637829837"+
"或者邮箱:boniu@itcaast.cn.";
//1.定义爬取规则
String regex="1[3-9]\\d{9}|(0\\d{2,7}-?[1-9]\\d{4,19})";
//2.把正则表达式封装成一个Pattern对象
Pattern pattern=Pattern.compile(regex);
//3.通过pattern对象去获取查找内容的匹配对象
Matcher matcher=pattern.matcher(data);
//4.定义一个循环开始查找信息
while (matcher.find()){
String rs=matcher.group();//获取到了找到的内容
System.out.println(rs);
}
}
用于搜索替换,分割内容
//1.public String replaceAll(String regex,String newStr),按照正则表达式匹配的内容进行替换
//需求1:请把 古力娜扎82917迪丽热巴93272马儿扎哈,中间的中文字符替换成-
String s1="古力娜扎82917迪丽热巴93272马儿扎哈";
System.out.println(s1.replaceAll("\\w+", "-"));
//需求2:某语言系统,收到一个口吃的人说的“我我我我喜欢编编编编程程程程”需要优化成“我喜欢编程”
String s2="我我我我喜欢编编编编程程程程";
/**
* (.)一组 匹配任意字符的
* \\1:为这个组声明一个组号:1号
* +:声明是重复的字
* $1:可以去到第一组代表的那个重复的字
*/
System.out.println(s2.replaceAll("(.)\\1+", "$1"));
//2.public String[] split(String regex)按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组
String s3="古力娜扎82917迪丽热巴93272马儿扎哈";
String[] names=s3.split("\\w+");
System.out.println(Arrays.toString(names));