正则表达式及其示例.ppt
正则表达式及其示例,传智播客视频+自己总结很全面 很有借鉴价值 刘汪洋,边界匹配器,行的开头$行的结尾 b 单词边界 B 非单词边界 A 输入的开头 G 上一个匹配的结尾 Z 输入的结尾,仅用于最后的结束符(如果有的话)z 输入的结尾,字符,x 字符 x 反斜线字符 t 制表符(u0009)n 新行(换行)符(u000A)r 回车符(u000D)f 换页符(u000C)a 报警(bell)符(u0007)e 转义符(u001B)cx 对应于 x 的控制符,字符类,abc a、b 或 c(简单类)abc 任何字符,除了 a、b 或 c(否定)a-zA-Z a 到 z 或 A 到 Z,两头的字母包括在内(范围)a-dm-p a 到 d 或 m 到 p:a-dm-p(并集)a-z&def d、e 或 f(交集)a-z&bc a 到 z,除了 b 和 c:ad-z(减去)a-z&m-p a 到 z,而非 m 到 p:a-lq-z(减去),预定义字符类,.任何字符(与行结束符可能匹配也可能不匹配)d 数字:0-9 D 非数字:0-9 s 空白字符:tnx0Bfr S 非空白字符:s w 单词字符:a-zA-Z_0-9 W 非单词字符:w,Greedy 数量词,X?X,一次或一次也没有 X*X,零次或多次 X+X,一次或多次 Xn X,恰好 n 次 Xn,X,至少 n 次 Xn,m X,至少 n 次,但是不超过 m 次,Logical 运算符,XY X 后跟 Y X|Y X 或 Y(X)X,作为捕获组,字符类运算符的优先级,如下所示,按从最高到最低的顺序排列:1 字面值转义 x 2 分组.3 范围 a-z 4 并集 a-ei-u 5 交集 a-z&aeiou,组和捕获,捕获组可以通过从左到右计算其开括号来编号。例如,在表达式(A)(B(C)中,存在四个这样的组:1(A)(B(C)2 A 3(B(C)4(C)组零始终代表整个表达式。之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器获取。,正则表达式中组的概念,()n 任何匹配的 nth 捕获组捕获组可以通过从左到右计算其开括号来编号。例如,在表达式(A)(B(C)中,存在四个这样的组:1(A)(B(C)2 A 3(B(C)4(C)组零始终代表整个表达式。(A)(B(C)1表示第一个括号$1另参数引用 1 2 3 4从左向右的顺序,匹配-校验手机号,例如String regux=“13580-99”;boolean b=tel.matchs(gre);System.out.println(b);也可将 regux=“1358d9”;,切割,String tel=“zhangsan lisi wangwu”;String regux=“+”;String names=tel.split(regux);for(String name:names)System.out.println(name);也可以写成String regux=“s+”;,正则表达式 切割,String tel=“zhangsanttttlisigggggggwangwu”;String regux=“(.)1+”;String names=tel.split(regux);for(String name:names)System.out.println(name);()表示组 1表示第一组(第一个括号的内容,需要转移),正则表达式 替换,将重复的字符替换成#号String str=“zhangsanttttlisigggggggwangwu”;str=str.replaceAll(“(.)1+,”#”);System.out.println(str1);,将重复的字符换成单个,String str=“zhangsanttttlisigggggggwangwu”;str=str.replaceAll(“(.)1+”,”$1”);System.out.println(str1);”$1”的意思是 获取前一个参数中的第一组,电话号码部分位数替换为*,效果*252 tel=tel.replaceAll(“(d3)d5(d3)”),”$1*$2”;System.out.println(tel);,正则表达式获取,Pattern p=Ppile(a*b);将正则规则进行对象的封装 Matcher m=p.matcher(aaaaab);通过正则对象的 Matcher 方法 与字符串相关联。获取要对字符串操作的匹配器对象Matcher 方法。boolean b=m.matches();通过匹配器对象方法 对字符串进行操作。,String words=“There is a dog on the desk!”;String regex=“ba-z3b”;需有单词边界/将正则封装成对象Pattern p=Ppile(regex);/通过正则表达式获取匹配器对象Matcher m=p.matcher(words);/使用Matcher方法对字符串进行操作While(m.find()System.out.println(m.group();,基本方法,int start()返回以前匹配的初始索引。String replaceAll(Stringreplacement)String group()返回由以前匹配操作所匹配的输入子序列int end()返回最后匹配字符之后的偏移量。boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。,/*将“口吃”的话,改为正常*/,public static void demo_one()String str=给.给.我.的的的的的.手手手手手机;/将其中的 逗号去掉str=str.replaceAll(.)+,);System.out.println(str);/去掉重复的汉字str=str.replaceAll(.)1+,$1);System.out.println(str);,ip 地址排序,public static void demo_two()String str=122.64.240.23 3.3.23.3 255.15.35.255 211.64.240.64;/补零str=str.replaceAll(d+),00$1);/防止位数高于三位 取后三位(高出的位数都是零)str=str.replaceAll(0+(d3),$1);/将每个ip 地址分隔开来String ips=str.split(+);/添加到集合TreeSet ipsort=new TreeSet();for(String ip:ips)ipsort.add(ip);/打印原有IP地址for(String ip:ipsort)System.out.println(ip.replaceAll(0*(d+),$1);,邮箱校验,public static void demo_three()String str=;String regex=a-zA-Z0-9_+1-9a-z(.a-z2,5)+;boolean b=str.matches(str);System.out.println(b);,