regex正则表达式
1.取单个字符的匹配 System.out.println("a".matches("[abc]"));//中括号里面的元素取一个true System.out.println("1".matches("[a-z1-9]"));//中括号里所有a到z和1-9的元素取一个true System.out.println("a".matches("[a-z]&&[a-c]"));//必须同时满足两边的中括号里的元素true System.out.println("a".matches("[^cde]"));//必须不是括号里面的元素true System.out.println("a".matches("\\d"));//代表的是数字0-9 false System.out.println("a".matches("\\D"));//代表的是非(数字0-9) true System.out.println("a".matches("\\s"));//小写s代表的是空白字符 false System.out.println(" ".matches("\\S"));//大写S代表的是非空白字符 false System.out.println("21".matches("\\w"));//代表的是0-9,a-z,A-Z和_中的一个 false System.out.println(" ".matches("\\W"));//代表的是非0-9,a-z,A-Z和_中的一个 true System.out.println("a".matches("."));//可以匹配任意字符 //1,以上带 [内容] 的规则都只能用于匹配单个字符。 //2,以上只适用于单个字符的匹配。用来匹配单个字符的。 //2,前四个是字符类,后面7个是预定义字符。
.
System.out.println("===========数量词========="); // 2、数量词: ? * + {n} {n, } {n, m} System.out.println("123".matches("\\d?"));//?代表0次或者1次,意思就是数字0-9中取0次或者1次 false System.out.println("dd".matches("\\D*"));//*代表0次或者多次,意思是非数字取0次或者多次 true System.out.println("qcsa".matches("\\w+"));//+代表1次或者多次,意思就是0-9a-zA-Z_ 中取1次或者多次 true System.out.println("第五步".matches("\\W{3}"));//{3}代表的是三次,意思就是不是0-9a-zA-Z_ 中取三次 true System.out.println("去外地".matches("\\s{2,}"));//{2, }代表的是取>=2次,意思就是取空取两次 false System.out.println("u啊好".matches("\\S{2,6}"));//{2,6}代表的是取>=2||<=6次 ,意思就是取这么多次非空值 true
System.out.println("=========其他常用========="); //3,其他几个常用的符号:(?i)忽略大小写 、 或:| 、 分组:() System.out.println("abc".matches("(?i)abc"));//(?i)是忽略大小写,但是两边字符不区分大小写的情况下一致才是true System.out.println("不千岛湖11".matches("\\S{3,}|\\s"));//|就是或者的意思,满足一边即可,类似于或 true System.out.println("黑马编程编程6666666".matches("黑马(编程)*(666)*"));//()代表的是()里面是一个组,这个组里要整体执行几次由后面加上符号决定
使用正则表达式校验QQ和电话
package com.itheima.d1_regex; import java.util.Scanner; // 目标:通过校验QQ号码格式带同学们初步认识正则表达式的使用步骤,并体会其便捷性。 //qq长度为6-20 public class Rd1 { public static void main(String[] args) { /* System.out.println("请输入你的QQ:"); String qq = new Scanner(System.in).next(); boolean flag = checkqq(qq); if (flag){ System.out.println("QQ号注册成功"); }else { System.out.println("QQ注册失败"); }*/ System.out.println("请输入你的电话:"); String phone = new Scanner(System.in).next(); boolean flag2 = checkPhone(phone); if (flag2){ System.out.println("电话注册成功"); }else { System.out.println("电话注册失败"); } } public static boolean checkqq(String qq){ return qq!=null&&qq.matches("[1-9]\\d{5,19}"); } // 18653559876 // 020-4344245 // 01043435355 public static boolean checkPhone(String phone){ return phone!=null&&(phone.matches("1[3-9]\\d{9}")|phone.matches("0\\d{2}-?\\d{7,8}")); } }
正则表达式爬虫爬取信息
package com.itheima.d1_regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Rd4 { public static void main(String[] args) { // 目标:了解使用正则表达式去文本中爬取想要的信息。 String data = "来黑马程序员学习Java,\n" + "电话:18512516758,18512508907\n" + "或者联系邮箱: boniu@itcast.cn\n" + "座机电话:01036517895,010-98951256\n" + "邮箱:bozai@itcast.cn,\n" + "邮箱2:dlei0009@163.com,\n" + "热线电话:400-618-9090 ,400-618-4000,\n" + "4006184000,4006189090\n"; String regex=("1[3-9]\\d{9}|(0[1-9][0-9]-?\\d{8,9})|(400-?\\d{3,4}-?\\d{4,5})|(\\w{5,11}@\\w{3,6}.?(\\w{2,3})){1,2}"); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(data); while (matcher.find()){ System.out.println(matcher.group()); } } }
分组爬取信息
package com.itheima.d1_regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo5 { public static void main(String[] args) { // 目标:了解使用正则表达式去文本中爬取想要的信息。(分组爬取, 了解) String data = "来黑马程序员学习Java,\n" + "电话:18512516758,18512508907\n" + "或者联系邮箱: boniu@itcast.cn\n" + "座机电话:01036517895,010-98951256\n" + "andy邮箱:bozai@itcast.cn,\n" + "邮箱2:dlei0009@163.com,\n" + "热线电话:400-618-9090 ,400-618-4000,\n" + "4006184000,4006189090\n"; // 1、创建一个匹配规则对象,封装正则表达式(爬取的规则) String regex = "(\\w{2,30})@(\\w{2,20})(\\.\\w{2,10}){1,2}"; Pattern pattern=Pattern.compile(regex); // 2、把内容和爬取规则建立联系,得到一个匹配器对象 Matcher matcher = pattern.matcher(data); // 3、开始使用匹配器对象,开始爬取内容 while (matcher.find()){ System.out.println(" 1"+matcher.group(1)); // 默认提取邮箱正则表达式第1个括号匹配的内容 System.out.println("2"+matcher.group(2)); // 默认提取邮箱正则表达式第2个括号匹配的内容 System.out.println("第三组:"+matcher.group(3)); // 默认提取邮箱正则表达式第2个括号匹配的内容 } } }
选择爬取用户信息
package com.itheima.d1_regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Re6 { public static void main(String[] args) { //需要爬取出所有进入系统的用户名 String data = "欢迎张全蛋光临本系统!他删库并跑路欢迎李二狗子光临本系统!" + " 欢迎马六子光临本系统!它浏览了很多好看的照片!欢迎夏洛光临本系统!他在六点钟送出了一个嘉年华!" ; String regex="欢迎(.+)光临";// 贪婪匹配 String regex2="欢迎(.+?)光临"; // 非贪婪匹配 Pattern pattern = Pattern.compile(regex2); Matcher matcher = pattern.matcher(data); while (matcher.find()){ System.out.println(matcher.group(1)); } } }
正则表达式对字符串的处理
package com.itheima.d1_regex; public class Re7 { public static void main(String[] args) { // 1、public String replaceAll(String regex , String newStr):按照正则表达式匹配的内容进行替换 // 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成 “-” String s="古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴"; String s1 = s.replaceAll("\\w+", "-"); System.out.println(s1); // 需求2(拓展,了解,可以不记): // 某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成“我喜欢编程!”。 String s2 = "我我我喜欢编编编编编编编编编编编编程程程"; String s3 = s2.replaceAll("(.)\\1+", "$1"); System.out.println(s3); } }
目录