《正则表达式及其示例ppt课件.ppt》由会员分享,可在线阅读,更多相关《正则表达式及其示例ppt课件.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、正则表达式及其示例正则表达式及其示例传智播客视频+自己总结很全面 很有借鉴价值 刘汪洋 2012.7.30边界匹配器边界匹配器 行的开头$行的结尾 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
2、-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 非单词字符:wGreedy Greedy 数量词数量词X?X,一次或一次也没有 X*X,零次或多次 X+X,一次或多次
3、 Xn X,恰好 n 次 Xn,X,至少 n 次 Xn,m X,至少 n 次,但是不超过 m 次Logical 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)组零始终代表整个表达式。之所以这样命名捕获组是因为在匹配中,保存了与
4、这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 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 tel=“18753993252”;String regux=“13580-99”;boolean b=tel
5、.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
6、=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(“
7、(.)1+”,”$1”);System.out.println(str1);”$1”的意思是 获取前一个参数中的第一组电话号码部分位数替换为电话号码部分位数替换为*效果 18753993252 187*252 String tel=“18753993252”;tel=tel.replaceAll(“(d3)d5(d3)”),”$1*$2”;System.out.println(tel);正则表达式获取正则表达式获取Pattern p=Ppile(a*b);将正则规则进行对象的封装 Matcher m=p.matcher(aaaaab);通过正则对象的 Matcher 方法 与字符串相关联。获取
8、要对字符串操作的匹配器对象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()返回以前匹配的初
9、始索引。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.repla
10、ceAll(.)1+,$1);System.out.println(str);ip 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);