全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java中使用正则表达式实现字符串匹配巧巧电脑网络2005-12-25收藏此文大中小分享到QQ空间人人网开心网豆瓣新浪微博腾讯微博更多0java的java.util.regex包按照面向对象的思路,把希望查询的字符串如is、thing或ting封装成一个对象,以这个对象作为模板去匹配一段文字,就更加自然了。思路清楚了。黑暗岁月有一个String,如何查询其中是否有y和f字符?最黑暗的办法就是:程序1:我知道if、for语句和charAt()啊。class Testpublic static void main(String args) String str=For my money, the important thing +about the meeting was bridge-building;char x=y;char y=f;boolean result=false;for(int i=0;istr.length;i+)char z=str.charAt(i); /System.out.println(z);if(x=z|y=z) result=true;break;else result=false;System.out.println(result);好像很直观,但这种方式难以应付复杂的工作。如查询一段文字中,是否有is?是否有thing或ting等。这是一个讨厌的工作。Java的java.util.regex包按照面向对象的思路,把希望查询的字符串如is、thing或ting封装成一个对象,以这个对象作为模板去匹配一段文字,就更加自然了。作为模板的那个东西就是下面要讨论的正则表达式。先不考虑那么复杂,看一个例子: 程序2:不懂。先看看可以吧?importjava.util.regex.*;class Regex1public static void main(String args) String str=For my money, the important thing +about the meeting was bridge-building;String regEx=a|f; /表示a或fPattern p=Ppile(regEx);Matcher m=p.matcher(str);boolean result=m.find();System.out.println(result);如果str匹配regEx,那么result为true,否则为flase。如果想在查找时忽略大小写,则可以写成:Pattern p=Ppile(regEx,Pattern.CASE_INSENSITIVE);虽然暂时不知道Pattern(模板、模式)和Matcher(匹配器)的细节,程序的感觉就比较爽,如果先查询is、后来又要查询thing或ting,我们只需要修改一下模板Pattern,而不是考虑if语句和for语句,或者通过charAt()。1、写一个特殊的字符串正则表达式如a|f。2、将正则表达式编译成一个模板:p3、用模板p去匹配字符串str。思路清楚了,现在看Java是如何处理的(Java程序员直到JDK1.4才能使用这些类。Pattern类与查找public final class java.util.regex.Pattern是正则表达式编译后的表达法。下面的语句将创建一个Pattern对象并赋值给句柄p:Pattern p=Ppile(regEx);有趣的是,Pattern类是final类,而且它的构造器是private。也许有人告诉你一些设计模式的东西,或者你自己查有关资料。这里的结论是:Pattern类不能被继承,我们不能通过new创建Pattern类的对象。因此在Pattern类中,提供了2个重载的静态方法,其返回值是Pattern对象(的引用)。如:public static Pattern compile(String regex) return new Pattern(regex, 0);当然,我们可以声明Pattern类的句柄,如Pattern p=null;p.matcher(str)表示以用模板p去生成一个字符串str的匹配器,它的返回值是一个Matcher类的引用,为什么要这个东西呢?按照自然的想法,返回一个boolean值不行吗?我们可以简单的使用如下方法:boolean result=Ppile(regEx).matcher(str).find();其实是三个语句合并的无句柄方式。无句柄常常不是好方式。后面再学习Matcher类吧。先看看regEx这个怪咚咚。正则表达式之限定符正则表达式(Regular Expression)是一种生成字符串的字符串。晕吧。比如说,String regEx=me+;这里字符串me+能够生成的字符串是:me、mee、meee、meeeeeeeeee等等,一个正则表达式可能生成无穷的字符串,所以我们不可能(有必要吗?)输出正则表达式产生的所有东西。反过来考虑,对于字符串:me、mee、meee、meeeeeeeeee等等,我们能否有一种语言去描述它们呢?显然,正则表达式语言是这种语言,它是一些字符串的模式简洁而深刻的描述。我们使用正则表达式,用于字符串查找、匹配、指定字符串替换、字符串分割等等目的。生成字符串的字符串正则表达式,真有些复杂,因为我们希望由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)描述任意的字符串,而且要准确。先看几个正则表达式例子:程序3:我们总用这个程序测试正则表达式。import java.util.regex.*;class Regex1public static void main(String args) String str=For my money, the important thing ;String regEx=ab*;boolean result=Ppile(regEx).matcher(str).find();System.out.println(result);/tureab*能匹配a、ab、abb、abbb。所以,*表示前面字符可以有零次或多次。如果仅仅考虑查找,直接用a也一样。但想想替换的情况。 问题regEx=abb*结果如何?ab+能匹配ab、abb、abbb。等价于abb*。问题regEx=or+结果如何?or?能匹配o和or。? 表示前面字符可以有零次或一次。这些限定符*、+、?方便地表示了其前面字符(子串)出现的次数(我们用来描述): x*,零次或多次 0,拓展阅读:JAVA正则表达式4种常用功能正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年钳工金属切削原理与刀具实操考核试卷
- 2025-2026年云计算网络技术实战模拟试题
- 2025-2026年陕西省部编版高二英语第1单元听力练习题
- 高中物理必修第二册“竖直面内的圆周运动”专题提升课教学设计
- 初中科学八年级下册“水与人类”专题复习教学设计
- 高三政治《当代国际政治与经济》专题复习教案设计与提分策略
- 初中七年级科学“走进制造”教学设计
- 小学二年级道德与法治“扣好人生第一粒扣子”教案设计
- 小学五年级心理健康教育心中的星星在发光教学设计
- 初中八年级地理教学设计:西北地区与青藏地区自然环境特征与区域发展第二课时
- 【长江证券】家电-家用电器行业全球视野看家电之拉美:扬帆起航
- JG/T 223-2017聚羧酸系高性能减水剂
- 初中数学:七八九年级全六册知识点总结(冀教版)
- DB6528T 202-2024 春玉米滴灌栽培技术规程
- 室内设计专业国家技能人才培养工学一体化课程设置方案
- 《无人机培训教材》课件
- 石油钻井工(技师、高级技师)职业资格考试题库(含答案)
- 人教版高中数学A版选必第2册《第四章 数列》大单元整体教学设计
- 玉米密植精准调控高产技术-李少昆
- (高清版)JTG 3810-2017 公路工程建设项目造价文件管理导则
- 人体常见病 知到智慧树网课答案
评论
0/150
提交评论