已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
正则表达式- Start如果你还不知道什么是正则表达式或者不是很清楚,请先阅读正则表达式精萃。下面是一个在 Java 中使用正则表达式的简单例子。javaview plaincopyprint?1. importjava.util.regex.Matcher;2. importjava.util.regex.Pattern;3. 4. publicclassTest5. 6. publicstaticvoidmain(Stringargs)7. 8. /Pattern表示一个正则表达式9. /Pattern的构造方法是私有的10. /可以通过compile静态方法实例化Pattern对象11. /在实例化的同时我们可以不指定或指定一个或多个全局匹配模式12. /下面的代码构建了用来匹配固定电话号码的正则表达式,采用不区分大小写和多行模式13. Patternp=Ppile(d3d?)-(d7d?),Pattern.CASE_INSENSITIVE|Pattern.DOTALL);14. 15. 16. /将构建好的正则表达式与目标字符串关联得到一个Matcher对象17. Matcherm=p.matcher(我的电话号码欢迎骚扰。);18. 19. 20. /find()方法将会在目标字符串中查找符合正则表达式的子字符串,如果找到则返回true21. /再次调用find()方法将会在上次匹配的结束位置开始查找22. /find(intstart)方法将从参数指定的位置开始查找符合正则表达式的子字符串23. if(m.find()24. 25. /start()方法返回整个匹配的起始位置26. /end()方法返回整个匹配的结束位置27. /group()方法返回匹配的内容,28. System.out.println(在目标字符串的+m.start()+到+m.end()+位置找到了+m.group();29. 30. /start(intgroup)方法返回第group个捕获型括号匹配的起始位置31. /end(intgroup)方法返回第group个捕获型括号匹配的结束位置32. /group(intgroup)方法返回第group个捕获型括号匹配的内容33. /groupCount()返回捕获型括号的数目34. System.out.println(在目标字符串的+m.start(1)+到+m.end(1)+位置找到了电话号码的区号+m.group(1);35. System.out.println(在目标字符串的+m.start(2)+到+m.end(2)+位置找到了电话号码+m.group(2);36. 37. else38. System.out.println(没有找到匹配的电话号码。);39. 40. 41. 42. /pattern()方法返回当前Matcher使用的正则表达式43. /usePattern方法用来更改和当前Matcher匹配的正则表达式44. m.usePattern(Ppile(w+.w+);/用来匹配邮件地址45. 46. 47. /reset(CharSequenceinput)方法用来更改和当前Matcher匹配的字符串48. m.reset();49. 50. 51. /matches方法用来验证目标字符串是否和正则表达式完全匹配52. /而find方法是去目标字符串中查找符合正则表达式的子字符串53. /lookingAt方法非常类似matches方法,但不要求完全匹配54. if(m.matches()55. System.out.println(m.group()+是一个合法的Email地址。);56. 57. 58. 59. 由此可见,在 Java 中使用正则表达式是非常简单的,我们只用到两个类 Pattern 和 Matcher。Pattern 对象表示一个正则表达式,在构建 Pattern 对象时,我们可以指定一个或多个全局匹配模式,Java 支持如下匹配模式。全局匹配模式局部匹配模式描述Pattern.UNIX_LINESd只把n作为换行符Pattern.DOTALLs点号能够匹配换行符Pattern.MULTILINEm和$可以匹配字符串内部换行符Pattern.COMMENTSx注释模式Pattern.CASE_INSENSITIVEi对ASCII字符进行不区分大小写匹配Pattern.UNICODE_CASEu对Unicode字符进行不区分大小写匹配Pattern.CANNON_EQ不同的编码中相同的字符视为相等Pattern.LITERAL纯文本模式之后我们可以将正则表达式与目标字符串关联得到一个 Matcher 对象,利用 Matcher 对象提供的方法我们可以对字符串进行查找、替换等操作。在上面的例子中,我们在整个目标字符串中查找能够匹配正则表达式的子字符串,事实上在应用正则表达式的时候,我们还可以指定目标字符串的检索范围,也就是说在目标字符串的子字符串中应用正则表达式。但此时会有一个问题,那就是 和 $ 应该匹配整个字符串的开头和结尾呢? 还是检索范围的起始和结束位置呢?Java 为我们提供了足够的灵活性,我们可以通过下面的方法来查看和设置,默认值是匹配检索范围的起始和结束位置。javaview plaincopyprint?1. hasAnchoringBounds()2. useAnchoringBounds(booleanb)还有一个问题是是否允许环视和单词分界符等跨越检索范围,同样,Java 为我们提供了下面的方法来查看和设置。默认情况下是不允许的。javaview plaincopyprint?1. hasTransparentBounds()2. useTransparentBounds(booleanb)下面是一个简单的例子。javaview plaincopyprint?1. importjava.util.regex.Matcher;2. importjava.util.regex.Pattern;3. 4. publicclassTest5. 6. publicstaticvoidmain(Stringargs)7. 8. Patternp=Ppile(d3d?-d7d?(?=,);9. Matcherm=p.matcher(我的电话号码欢迎骚扰。);10. 11. 12. /region方法设置正则表达式的检索范围13. /regionStart()方法返回检索范围的起始位置14. /regionStart()方法返回检索范围的结束位置15. m.region(8,21);16. System.out.println(我们将在字符串的+m.regionStart()+到+m.regionEnd()+范围内应用正则表达式。);17. 18. 19. /设置环视可以突破检索范围,从而使表达式能够匹配成功20. m.useTransparentBounds(true);21. if(m.find()22. System.out.println(在目标字符串的+m.start()+到+m.end()+位置找到了+m.group();23. else24. System.out.println(没有找到匹配的电话号码。);25. 26. 27. 28. /reset()方法用来取消检索范围29. m.reset();30. 31. 32. 上面我们介绍了如何进行查找操作, 下面我们通过一个例子看一下如何进行替换操作。javaview plaincopyprint?1. importjava.util.regex.Matcher;2. importjava.util.regex.Pattern;3. 4. publicclassTest5. 6. publicstaticvoidmain(Stringargs)7. 8. Patternp=Ppile(.+(d4-d8).*$);9. Matcherm=p.matcher(我的电话号码欢迎骚扰。);10. 11. /replaceAll和replaceFirst方法用来执行替换操作12. /下面的替换操作将把电话号码从目标字符串中提取出来13. StringmyPhoneNumber=m.replaceAll($1);14. System.out.println(我的电话是:+myPhoneNumber);15. 16. 17. /在替换操作中$符号用来反向引用18. /如果要替换的内容是从变量中传人的,而变量中恰好有$符号,这将导致替换失败19. /因此在替换之前最好使用quoteReplacement方法转义参数20. Stringsalary=$1000;21. m.usePattern(Ppile(d+);22. m.reset(我的工资是1000);23. Stringresult=m.replaceFirst(Matcher.quoteReplacement(salary);24. System.out.println(result);25. 26. 27. 上面的例子演示了一个简单的替换操作,下面的例子演示了一个高级的替换操作。javaview plaincopyprint?1. importjava.util.regex.Matcher;2. importjava.util.regex.Pattern;3. 4. publicclassTest5. 6. publicstaticvoidmain(Stringargs)7. 8. Patternp=Ppile(d+)元);9. Matcherm=p.matcher(我的工资是1000元,张三的工资是1500元,你的呢?);10. 11. StringBufferresult=newStringBuffer();12. while(m.find()13. Doublesalary=Double.valueOf(m.group(1);14. salary=salary/6.3698;/转换汇率15. Stringreplacement=String.format(%.2f美元,salary);/保留2位小数16. 17. /在每次find方法之后调用appendReplacement18. /它将匹配之前的文本和要替换的内容添加到result中19. /第一次循环时,它将匹配之前的文本(我的工资是)20. /和替换的内容(replacement)添加到result中21. /第二次循环时,它将匹配之前的文本(,张三的工资是)22. /和替换的内容(replacement)添加到result中23. m.appendReplacement(result,replacement);24. 25. 26. /循环之后,appendTail方法将剩余的文本添加到result中27. m.appendTail(result);28. 29. 30. /打印结果31. System.out.println(result);32. 33. 34. 上面两个关于替换的例子,我们并没有直接对原始字符串替换,而是返回替换后的结果,原始字符串并没有改变,如果原始字符串很长,这将严重影响性能,下面的例子演示了如何直接对原始字符串进行替换。javaview plaincopyprint?1. importjava.util.regex.Matcher;2. importjava.util.regex.Pattern;3. 4. publicclassTest5. 6. publicstaticvoidmain(Stringargs)7. 8. StringBuildertext=newStringBuilder(我的工资是1000元,张三的工资是1500元,你的呢?);9. Patternp=Ppile(d+)元);10. Matcherm=p.matcher(text);11. 12. intmatchPoint=0;13. while(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职建筑智能化工程技术(建筑智能化应用)试题及答案
- 2025年中职建筑(建筑测量基础)试题及答案
- 2025-2026学年人教版高二英语上学期必刷常考题之应用文写作
- 2025年中职机电技术(电气综合实操)试题及答案
- 基于数据模型的成本管控目标预测
- 2025-2026学年广东汕头市潮南区某校统编版六年级上册入学测试语文试卷(附答案)
- 2025-2026学年高二语文期中模拟卷·重难突破卷(考试版A4)选择性必修上册(天津专用)
- 超声诊断在关节疾病中的应用
- 吞咽障碍营养不良护理课件及答案
- 人教六年级下册期末数学重点中学试卷经典套题答案
- 四年级道德与法治三单元复习教案
- mdvx节能证书及第三方检测报告cqc
- 律师办理建设工程施工合同纠纷案件诉讼业务操作指引2023版
- Unit 2 how to keep healthy作文课件 英语八年级上册
- 土木工程施工课程设计完整版
- 胶质瘤治疗课件
- 万人计划蓝色简约万人计划青年拔尖人才答辩PPT模板
- 《梅岭三章》 完整版课件
- 2022年四川省绵阳市涪城区东辰国际学校小升初数学试卷
- 气管镜科室讲课ppt课件(PPT 69页)
- 钢-混凝土叠合梁施工
评论
0/150
提交评论