正则表达式及其示例.ppt_第1页
正则表达式及其示例.ppt_第2页
正则表达式及其示例.ppt_第3页
正则表达式及其示例.ppt_第4页
正则表达式及其示例.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

正则表达式及其示例,传智播客视频+自己总结 很全面 很有借鉴价值 刘汪洋 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-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 tel =; 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”的意思是 获取前一个参数中的第一组,电话号码部分位数替换为*,效果187*252 String tel =“; 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(String replacement) 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 =“3 55 4“; /补零 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“)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论