黑马程序员_正则表达示
来源:互联网 发布:学校封了游戏端口 编辑:程序博客网 时间:2024/06/01 09:04
------- android培训、java培训、期待与您交流! ----------
/*|-java.util.regex; |-Matcher|- find() 查找下一个匹配的子串|- group() 返回匹配的子串|- replaceAll 替换|-Pattern|- compile(regex) 将给定的正则表达式编译到模式中。|- matcher(str) 匹配要操作字符串,获取匹配器对象 |- matches 匹配|- split 切割*/
调用顺序:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
一.基本概念
1) String类中多种方法来操作字符串,比较复杂。就出现正则表达示,按规则匹配字符串,操作简便,且简化了代码的书写
2) 概念:正则表达示就是符合一定规则的表达示
3) 作用:专门用于操作字符串
4) 特点:用一些特定符号 ,来表示代码操作,就简化了书写。
5) 好处:简化字符串的复杂操作。 弊端:符号越多,规则越长,阅读性太差。
6) 常用符号:
/* <字符类>[abc]: abc中的一个 [^abc]: 任意字符,非abc [a-zA-Z]: 取并集 [a-d[m-p]]: 取并集 [a-d&&[def]]: 取交集[a-z&&[^bc]]: 取非bc [a-z&&[^m-p]]: 取非m-p<Greedy数量词>X?:0次或1次X*:0次或n次X+:1次或n次X{n}:恰好n次X{n,}:至少n次X{n,m}:有n到m次<预定义字符类>\d:数字[0-9]\D:非数字[^\d]\w:单词字符[a-zA-Z_0-9]\W:非单词字符[^\w]\s:空白字符:[\t\n\x0B\f\r] \S:非空白字符[^\s]*/
二.四种具体的操作功能
1) 匹配:将字符串按规则进行匹配matches()操作,只要字符串中有一处不匹配,就匹配结束,返回false.
/*格式:boolean b = str.matches(regex);例:String str = "abc123";boolean b1 = str.matches("[a-z]+\\d?");boolean b2 = str.matches("[a-z]{3,}\\d+");*/
2) 切割:将字符串str按规则regex,进行切割split()操作,得到一个数组arr.
格式:String[] arr = str.split(regex);
1. 斜杠\在正则中是成对出现的。
regex = "\\\\"; 按\\进行切割
regex = "\\."; 按.进行切割
regex = " +"; 按多个空格进行切割
2. 按叠词进行切割,组()
叠词的规则:regex = "(.)\\1+";
叠词:aaa,dd,qqq,哈哈
前面一个字符是任意字符用"."表示,添加一个括号(.)封装成一个组
后面的一个字符和前面 一个相同,就用前一个组 ,用\n(n就是组的编号 )获取
组:将要重复使用的规则用()封装成组,让规则重用。
组:((())())
作用:封装规则,以便规则重用。
个数:即左括号的个数。
编号:从1开始,按左括号的顺序编号。
3) 替换:把匹配规则的内容替换成newStr
格式:str.replaceAll(regex,newStr);
1. 一般替换,如:把字符串中长度超过5的数字子串替换为*。
例:String str = "qw135990003ei5400935qe";
str = str.replaceAll("\\d{5,}",*);
2. 删除部分内容。即把要删除的内容替换成""。
格式:str.replaceAll(regex,"");
例:String str = "ja....va";
str = str.replaceAll("(\\.)+","");
3. 重复内容,替换为单个词,即叠词去重复。
格式:str.replaceAll("(.)\\1+","$1");
例:String str = "jjjaaavvaa"
str = str.replace("(.)\\1+","$1");
注:$n(n是组的编号)获取规则中的组,作为新的替换内容。
4) 获取:获取符合规则的子串
1. 将规则regex封装成对象p。 Pattern p = Pattern.compile(regex);
2. 将对象p关联要操作的字符串str。 p.matcher(str);
3. 关联后,获取匹配器对象m。 Matcher m = p.matcher(str);
4. 通过匹配器中的方法find(),group()获取子串。
m.find()在str中查找下一个匹配(符合规则)的子串。
m.group()获取查找到的匹配的子串。
例:
public static void main(String[] args){String str = "jin tian tian qi zhen hao!";String regex = "\\b[a-z]{3,4}\\b"; // 单词边界\b// 将规则封装成对象Pattern p = Pattern.compile(regex);// 让对象关联要作用的字符串,获取匹配器对象Matcher m = p.matcher(str);// find查找下一个匹配规则的子串,group返回匹配规则的子串。// 注意:如果在查找前进行过匹配matches(),则从匹配后的位子 开始查找。while(m.find()){System.out.print(m.group()); }}
三.四种功能如果去使用。
1) 如果只想知道该字符是否对是错,使用匹配。
2) 想要将已有的字符串变成另一个字符串,替换。
3) 想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。
4) 想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
四.练习
1) 将下面字符串转成:我要学编程。
"我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.程程...程...程";
步骤:
1. 去掉重复的点,即把点替换为""。replaceAll("\\.+","");
2. 叠词去重复,replaceAll("(.)\\1+","$1");
2) ip排序192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
步骤:
1. 前面添加2个0,使每个数至少有3位。 replaceALL("(\\d+)","00$1");
2. 去除前面的0,保证每个数只有3位。 replaceALL("0*(\\d{3})","$1");
3. 用空格切割,得到的数组存到TreeSet集合中。
4. for循环取出每个ip,并去掉每个数前面的0。replaceAll("0*(\\d+)","$1");
3)邮箱校验
1. String str = "kx8777@sina.com"
2. String regex = "[a-zA-z_0-9]+@[a-zA-Z]+(\\.[a-zA-Z]+){1,3}"; // 较精确的校验
regex = "\\w+@\\w+(\\.\\w+)+"; // 相对不太精确的校验
3. boolean b = str.matches(regex);
四.其它
1) 正则中的X*:0次或多次
/*str ="";str = str.replaceAll("([b]*)","i");//按一定规则替换为iSystem.out.println(str);str ="b";str = str.replaceAll("([b]*)","i");//按一定规则替换为iSystem.out.println(str);str ="a";str = str.replaceAll("([b]*)","i");//按一定规则替换为iSystem.out.println(str);结果:iiiiai*/
- 黑马程序员_正则表达示
- 黑马程序员_java学习笔记八 正则表达示
- 黑马程序员-正则表达学习笔记
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_ 正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 词的向量表示
- 实现wamp中PHP/Apache/Mysql版本切换(定制php版本)
- 初学 Python —按权重撷取元素
- 范佩西称扳平球如绝杀
- java 图片缩放处理
- 黑马程序员_正则表达示
- [css]margin/padding/display:inline/block/float
- java复制文件或文件夹
- 发货单和规范郭德纲的发的发的
- UINavigationController配合Segment
- 读取图片文字的软件有吗
- MVC 中接受Flash的图片上传
- 求职经验
- eval解析json字符串