(103)正则表达式(匹配、切割、替换、获取)、正则综合练习
来源:互联网 发布:人工智能和arvr 编辑:程序博客网 时间:2024/06/05 11:01
正则表达式:符合一定规则的表达式
作用:用于专门操作字符串的表达式
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性差
特点:用特定的符号来代表一些代码操作,这样就简化了代码书写
学习正则表达式就是学习符号的应用方法
一、匹配 String matches方法
public boolean matches(String regex)
//不能以0开头、必须都是数字,位数5-15 String str="1989m"; String regex="[1-9]\\d{4,14}"; boolean b=str.matches(regex); System.out.println(b);//false
//手机号码:13 15 18(只能包含数字且11位) String str="1333296245a"; String regex="[1][3,5,8]\\d{9}";//若“\”出现,则“\\” boolean b=str.matches(regex); System.out.println(b);
二、切割
public String[] split(String regex)
public String[] split(String regex, int limit)
String str="zhangsan lisi wangwu"; String regex=" +";//规则是按照空格出现一次或者多次切割 String[] arr=str.split(regex); for(String s:arr) { System.out.println(s); }
String str="zhangsan.lisi.wangwu"; String regex="\\.";//用.切割,因为"."在正则中有含义:代表任意字符,所以要对"."转义为"\." //在字符串中\又具有转义的作用,所以要再加个"\",这样正则中“\.”就是普通的“.” String[] arr=str.split(regex); for(String s:arr) { System.out.println(s); }
String str="c:\\abc\\a.txt"; String regex= "\\\\";//根据\\切割,切一个"\",要用"\\" String[] arr=str.split(regex); for(String s:arr) { System.out.println(s); }
String str="ahhhcidbvkkoccc"; String regex= "(.)\\1+"; //按照叠词切割,为了可以让规则的结果被重用,可以将规则封装成一个组, //用()完成,组的出现都有编号,从1开始,想要使用已有的组可以通过\n(n就是组的编号) //的形式来获取 String[] arr=str.split(regex); for(String s:arr) { System.out.println(s); }
三、替换
public String replaceAll(String regex, String replacement)
String str="wer8934605juowa89320571f"; String regex= "\\d{5,}";//将连续5个以上数字替换成# String str1=str.replaceAll(regex, "#"); System.out.println(str1);
String str="cudddbhuuujddd"; String regex= "(.)\\1+";//将多个重复字母替换成& String str1=str.replaceAll(regex, "&"); System.out.println(str1);
String str="cudddbhuuujddd"; String regex= "(.)\\1+";//将多个重复字母替换成一个字母 String str1=str.replaceAll(regex, "$1");//$1就是获取叠词的第一个字母 System.out.println(str1);
四、获取
操作步骤:
1,将正则表达式(规则)封装成对象
2,让正则对象和要操作的字符串相关联
3,关联后,获取正则匹配引擎
4,通过引擎对符合规则的自创进行操作,比如获取
String str="min tian jiu yao fang jia le ,da jia。"; String regex="\\b[a-z]{3}\\b";//"\b"是单词边界,获取长度为3的单词z子串 Pattern p=Pattern.compile(regex);//将给定的正则表达式编译到模式中 //将正则对象和要操作的字符串相关联,就获得了匹配引擎 Matcher m=p.matcher(str); //通过匹配引擎对符合规则的子串进行操作,比如取出 /* boolean b=m.find();//将规则作用到字符串上,并进行符合规则的子串的查找 System.out.println(b); String sub=m.group(); System.out.println(sub); 类似集合中的迭代器,下一个相匹配的是否存在,存在输出该子串 */ while(m.find()) { System.out.println(m.group()); System.out.println(m.start()+"....."+m.end());end是结束字符的下一个字符位置 }////////////////////////////////////////// System.out.println(m.matches());//将规则作用在整个字符串上,相当于规则就是3个字母的单词, //因为字符串长度>3,所以返回false,并且指针指向后移,在下面的寻找子串的过程中,不会输出“min” while(m.find()) { System.out.println(m.group()); System.out.println(m.start()+"....."+m.end());end是结束字符的下一个字符位置 }
五、练习
需求一将“我我…我我…我要..要要…要要…学学学…学学…编编编..编程..程.程…程…程”——>”我要学编程”
到底用四种功能中的哪一个?或者哪几个?
1,如果只想知道该字符对错,用匹配
2,想要将已有的字符串变成里一个字符串,替换
3,想要按照自定的方式将字符串变成多个字符串,切割。(获取规则以外 的子串)
4,想要拿到符合需求的字符串子串,获取。(获取符合规则的子串)
StringBuilder sb=new StringBuilder(); String str="我我...我我...我要..要要...要要...学学学...学学...编编编..编程..程.程...程...程"; //首先可以根据多个.切割,再将其合并成字符串 String re="\\.+"; String [] arr=str.split(re); for(String s:arr) { sb.append(s); } String str1=sb.toString();//我我我我我要要要要要学学学学学编编编编程程程程程 上面的切割也可以用替换的方法 /* //替换,现将.去掉 String re="\\.+"; String str1=str.replaceAll(re, ""); System.out.println(str1); */ //再按照叠词(.)\\1+,将重叠词去掉 String re1="(.)\\1+"; String str2=str1.replaceAll(re1, "$1"); System.out.println(str2);
需求二 : 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30 将ip地址进行地址段顺序的排序
String ip="192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30"; //由2.2.2.2,每段需要的0为2个,所以IP的每一段都补2个零,从而使得每段至少3个位 String re="(\\d+)";//取多个数字,因为要获得其值,所以要包装成组 ip=ip.replaceAll(re, "00$1"); System.out.println(ip); //要进行比较大小的就是每段的后3位,在上面的加“0”过程中,例如192-->00192,所以要将多余的0去掉 //0*:0含有零个或者多个,(\\d{3})取最低三位,因为0*已将每段的0取走,要获取最低三位,所有用组 String re1="0*(\\d{3})"; ip=ip.replaceAll(re1, "$1"); System.out.println(ip); //将这个ip地址按照空格切割成字符数组 String re2=" +"; String [] arr=ip.split(re2); //下面进行排序,可以用Arrays.sort方法进行排序 Arrays.sort(arr); //System.out.println(Arrays.toString(arr)); //因为当前就是每段3位,002,这种需要替换一下,所以要在遍历过程中进行替换 String re3="0*(\\d+)"; for(String s:arr) { System.out.println(s.replaceAll(re3, "$1")); }
需求三:对邮件地址进行校验
String mail="SDGRGH@sina.com.cn";String mail="SDGRGH@sina.com"; String reg="[a-zA-Z0-9_]{6,12}@[a-zA-Z0-9_]+(\\.[a-zA-Z]+){1,3}";//用户名是大小写字母 //数字和下划线都可以,[]只是一位判断 System.out.println(mail.matches(reg));
- (103)正则表达式(匹配、切割、替换、获取)、正则综合练习
- 正则表达式的四大操作(匹配,切割,替换,获取)
- 黑马程序员---正则表达式笔记(匹配,切割,替换,获取)
- JAVA 正则表达式(匹配、切割、替换)
- 正则表达式之匹配切割替换获取
- 黑马程序员_正则表达式(正则匹配,替换,切割,获取,正则练习)
- 黑马程序员_正则表达式(正则匹配,替换,切割,获取,正则练习)
- java正则表达式详解(匹配、切割和替换)
- 正则表达式__【匹配、切割、替换】【获取:Pattern & Matcher】【网页爬虫(蜘蛛)】
- day25正则表达式,匹配,切割,替换。获取。网页爬虫
- 正则表达式,匹配,切割,替换。获取。网页爬虫
- JAVA正则表达式匹配,替换,查找,切割
- JAVA正则表达式匹配,替换,查找,切割
- JAVA正则表达式匹配,替换,查找,切割
- JAVA正则表达式匹配,替换,查找,切割
- 正则表达式的匹配,替换和切割
- Java正则表达式匹配,替换,查找,切割
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
- vb.net 教程 12-3 HtmlElement类 1
- python内建函数
- mb_convert_encoding无效(待解决)
- idea快捷键整理
- Android 通用标题栏之组合控件
- (103)正则表达式(匹配、切割、替换、获取)、正则综合练习
- CodeForces
- 构建高并发高可用的系统平台架构实践
- Oulipo HDU
- hdu,1051,Wooden Sticks
- TortosieGit解决冲突的方法
- YARN原理总结
- 调研TCP定时器
- 图像无法显示Trackbar