正则表达式
概念:
· 就是由一些特定的字符组成的,代表的是一个规则
作用一:用来校验数据格式是否合法
作用二:在一段文本中查找满足要求的内容
初体验:
java
public class Work1 {
public static void main(String[] args) {
System.out.println(checkqq(null));
System.out.println(checkqq("25123432"));
System.out.println(checkqq("234333t53"));
}
public static boolean checkqq(String qq){
return qq!=null && qq.matches("[1-9]\\d{5,19}");
}
}
书写规则:
应用案例:
java
import java.util.Scanner;
public class Work1 {
public static void main(String[] args) {
checkPhone();
}
public static void checkPhone(){
while (true) {
System.out.println("请输入你的电话号码(手机|座机)");
Scanner sc = new Scanner(System.in);
String phone = sc.nextLine();
//17516397212 010-34242424 0182783585
if (phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")){
System.out.println("输入的号码格式正确");
break;
}else {
System.out.println("您输入的号码格式不正确");
}
}
}
}
用于查找信息
java
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Work1 {
public static void main(String[] args) {
method1();
}
public static void method1(){
String data = "来缤纷世界学习java,\n"+
" 歪歪:1866656398,18699937577\n"+
" 或者联系邮箱:boniu@itcast.cn,\n"+
" 座机电话:01036517895,010-98951256\n"+
" 邮箱:bozai@itcast.cn,\n"+
" 邮箱:dlei0009@163.com,\n"+
" 热线电话:400-618-900,400-618-400,4006184000,4006189090";
//定义爬取规则
String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})|(\\w{2,}@\\w{2,20}(\\.\\w{2,20}){1,2})"
+"|(400-?\\d{3,7}-?\\d{3,7})";
//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);
}
}
}
用于搜索替换,分隔内容
java
public class Work1 {
public static void main(String[] args) {
//把之间的非中文字符替换成"-"
String s1 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
System.out.println(s1.replaceAll("\\w+", "-"));
//把"我我我喜欢编编编编编编编编程程程程!"优化成"我喜欢编程!"
String s2 = "我我我喜欢编编编编编编编编程程程程!";
/*
(.)一组 .匹配任意字符
\\1:为这个组声明一个组号
+:声明必须是重复的字
$1:可以去到第一组代表的那个重复的字
*/
System.out.println(s2.replaceAll("(.)\\1+", "$1"));
//把人名获取出来
String s3 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
String[] names = s3.split("\\w+");
System.out.println(Arrays.toString(names));
}
}