版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java正则表达式的总结java正则表达式,可以用于很多类型的文本处理,如匹配, 搜索,提取和分析结构化内容判断用户的输入是否符合实 际需求。本文将对java正则表达式做总结。大部分人会觉得java正则表达式是很复杂的,本文由简 入深的介绍java正则表达式。如果你是想简单的了解,看前面的内容就可以了。如果想深入理解一下,可以多看一点。一. 简单的正则表达式(一)几个简单示例展示:package com. xykjmatcher;import java uti1 arrays;public class test /'*正则表达式其实也是一串字符串*先说几个简单的符号意义* 1.的使用,
2、里面可以放多个字符,代表任选其中一个* 2. d代表任意数字* 3. n代表前面的东西可以出现n次* */public static void main(string args) 示例一:判断输入的号码是不是身份证号码/身份证16或18位,第一位不能是零,最后一位可以是xx/string的matches方法能支持正则表达式string num=m 11234567891234561xm;/定义身份证号码string regexl二"1-9 d 14 dxx ";/判断十六位的正则表达式string regex2二"1-9 d 14 dxx ";/判断十八
3、位的正则表达式 /判断输入的字符串是否是符合要求matches的使用if (num. matches(regex 1) |num. matches(regex2) system, out. printin ("身份证号码匹配成功");else system, out. printin(n不是身份证号码");示例二: 去掉一个算式的加减乘除符号/方法split (分割字符串)也支持正则表达式string num2二"12+3-8/5*7";/算式string regex3="+*/-";/加减乘除的正则表达式,代表转义符,后面
4、解释string arr=num2. split(regex3) ; /使用正则表达式分割字符串system, out. printin (arrays. tostringo.yr) ;/打印数组的结果/其实前面一题最简单的做法是:使用replaceall/把字符串中符合正则表达式的字符串用replaceall方法的第二个参数代替string a二num2. replaceall(regex3,"");system. out. println(a);上面的程序,涉及到了简答的正则表达式,其实就是string类里面的几个方法的使用。(二)一个复杂一点的例子package co
5、m.xykj.matcher;import java.utilregex.matcher; import java.util.regex.pattern;public class test2 /*获得一长串字符串中的某些字符* * /public statix void main(string args) 比如从一长串字符串中获取电话号码string str="我想购买一本java疯狂讲义,请尽快联系quot;+ ”如果想交朋友,联系1+ ”出售二手联想电脑,型号:5560,需要的人可以联系quot;;/创
6、建一个pattern对象,并用在它建立一个matcher对象/假设手机号格式都是13x和15x,只有11位,实际设计中可以自己修改string regex=h(13)i(15)d9“;matcher matcher=pattern.co/wpite(regex)matcher(str);/卩匚酉己元素 while (matcherfind() system. out. printin (matcher. group(); /打印符合条件的字符串二. 正则表达式的相关类和方法java. util, regex是一个用正则表达式所订制的模 式来对字符串进行匹配工作的类库包。它包括两个类:patte
7、rn (模式)和 matcher (状态).(一)patternpattern是一个正则表达式经编译后的表现模式。在 java中,通过适当命名的pattern类可以容易确定stri ng是否匹配某种模式模式可以象匹配某个特定的string那样简单,也可以很复杂,需要采用分组和字符类, 如空白,数字,字母或控制符.因为java字符串基于统一 字符编码(unicode),正则表达式也适用于国际化的应用 程序.pattern类的方法简述方法说明static pettern compile(string regex,int flag)编译模式,参数regex表示输入的正则表 达式,flag表示模式类型
8、(pattern.case_insensitive 表示不 区分大小写)matchermatch(charsequence in put)获取兀配器,input时输入的待处理的字 符串static boolean matches(string regex, charsequence in put)快速的匹配调用,直接根据输入的模式regex 匹配 inputstring split(charsequence input,int limit)分隔字符串input,limit参数可以限制分 隔的次数(二)matchermatcher对象是一个状态机器,它依据pattern对象做 为匹配模式对字符串
9、展开匹配检查。首先一个pattern实 例订制了一个所用语法与perl的类似的正则表达式经编 译后的模式,然后一个matcher实例在这个给定的pattern实例的模式控制下进行字符串的匹配工作。matcher类的方法简述1 1方法说明boolean matches()对整个输入字符串进行模式匹配.boolean lookingat()从输入字符串的开始处进行模式匹配boolean find(int start)从start处开始匹配模式int groupcount()返回匹配后的分组数目string replaceaii(string replacement)用给定的replacement全
10、部替代匹配的 部分string repalcefirst(string replacement)用给定的replacement替代第一次匹配的部分matcherappendreplaceme nt(stringbuffersb,string replacement)根据模式用replacement替换相应内容, 并将匹配的结果添加到sb当前位置之 后stringbuffer appendtail(stringbuffer sb)将输入序列屮匹配z后的末尾字串添加到sb 当前位置之后.三. 正则表达式中常见通配符对于单字符串比较而言,使用正则表达式没有什么优 势.regex的真正强大之处在于体现
11、在包括字符类和量词 (*,+,?)的更复杂的模式上.(一)字符类代表的意义:d数字d非数字w 单字字符(0-9,a-z,a-z)w非单字字符s空白(空格符,换行符,冋车符,制表符)s非空白由方括号内的一个字符列表创建的自定义字符类.匹配任何单个字符下面的字符将用于控制将一个/模式应用到匹配次数的过程.?重复前面的子模式0次到一次*重复前面的子模式0次或多次+重复前面的子模式一次到多次(二)实例部分:1 实例一:对整个字符串的检验要求:判断模式与要匹配的文本是不是等价的.分析:静态的pattern.matches方法用于比较一个string 是否匹配一个给定模式.代码如下:string data
12、=hjavah;string regex=njavan;boolean result=pattern.matches(regex,data);2实例二:+? *的用法要求:判断一串字符串数组里面符合条件的字符串 代码如下:string dataarr = ”moon”,”mon”,”moon”,“mono” ; /要判断的数组 for (string str : dataarr) 遍历每一个字符串string patternstr=hm(o+)n" 正则表达式boolean result = pattern.matches(patternstr, str); 判断是否匹配if (re
13、sult) system.out.printin(”字符串 ”+str+” 匹配模式 ”+patternstr+” 成功”);elsesystem.out.println(”字符串 ”+str+” 匹配模式 n+pattemstr+n 失败“);模式是” m(o+)n”,它表示mn中间的。可以重复一次或多 次,因此moon,mon,mooon能匹配成功,而mono在n后多了 一个o,和模式匹配不上.注:+表示一次或多次;?表示0次或一次;*表示0次或多次.3实例三:的用法要求:判断一串字符串数组里面符合条件的字符串 代码如下:string dataarr = “ban”,”ben”,“bin”
14、,”bon”,”burt,”byrt,”baen”; for (string str : dataarr) string patternstr=ffbaeiounf,;boolean result = patternmatches(pattemstr, str);if (result) system.out.println(”字符串 “+str+” 匹配模式 ”+patternstr+” 成功”);elsesystem.out.println(”字符串 ”+str+” 匹配模式 ”+patternstr+”失败”);注:方括号中只允许的单个字符,模式“baeioun”指定, 只有以b开头,n结
15、尾,中间是a,e,i,o,u中任意一个的才 能匹配上,所以数组的前五个可以匹配,后两个元素无法匹 配.方括号表示只有其中指定的字符才能匹配.4实例四:丨的用法要求:判断一串字符串数组里面符合条件的字符串 代码如下:stringf dataarr = “been”,“bean”,“boon”,”buin”,”bynn”; for (string str : dataarr) string patternstr=mb(ee | ea | oo)n” ;boolean result = pattern.matches(patternstr, str);if (result) system.out.p
16、rintlnc 符串 ”+str+” 匹配模式 ”+patternstr+” 成功“);elsesystem, out. printin(”字符串 ”+str+” 匹配模式 ”+pattemstr+” 失败”); 如果需要匹配多个字符,那么就不能用上了,这里我们 可以用0加上丨来代替,()表示一组,丨表示或的关系,模式 b (ee | ea | oo) n 就能匹配 been, bean, boon 等 因此前三个能匹配上,而后两个不能.5实例五:d的使用要求:判断一串字符串数组里面符合条件的字符串 代码如下:string dataarr = ”1”,”10”,”101”,”1010”,” 1
17、00+”;for (string str : dataarr) string patternstr=”d+”;boolean result = pattern.matches(patternstr, str);if (result) system, out. printin(”字符串 ”+str+” 匹配模式 ”+pattemstr+” 成功”);elsesystem.out.println(”字符串 ”+str+” 匹配模式 ”+pattemstr+” 失败”);注:从前面可以知道,d表示的是数字,而+表示一次或多次, 所以模式d+就表示一位或多位数字.因此前四个能匹配上,最后一个因为+号是
18、非数字字符而 匹配不上.实例六:w d +的使用要求:判断一串字符串数组里面符合条件的字符串 代码如下:string dataarr = ”a100”,”b20”,“c30“,“df10000“,”ghot”; for (string str : dataarr) string patternstr=”w+d+”;boolean result = pattern.matches(patternstr, str);if (result) system.out.printin(”字符串 ”+str+” 匹配模式 ”+patternstr+” 成功”);elsesystem, out. printi
19、ng 字符串 ”+str+” 匹配模式 h+patternstr+"失败”); 模式w+d+表示的是以多个单字字符开头,多个数字结尾 的字符串,因此前四个能匹配上,最后一个因为数字后还含 有单字字符而不能匹配.7实例七:s的使用 要求:字符串的分割 代码如下:string str=”薪水,职位姓名;年龄性别“;string dataarr =str.split(”,s;”);/代表可以用,或空格或;分割字符串 for (string strtmp : dataarr) system.out.pri ntln(strtmp);string类的split函数支持正则表达式,上例中模式能匹
20、 配”,”,单个空格,”;”中的一个,split函数能把它们中任意一 个当作分隔符,将一个字符串劈分成字符串数组.&实例八:的使用要求:字符串的分割代码如下:string str=n2007年 12月 11 日”;pattern p = ppile(”年月日”);string dataarr =p.split(str);for (string strtmp : dataarr) system.out.println(strtmp);pattern是一个正则表达式经编译后的表现模式,它的split 方法能有效劈分字符串.注意其和string.split()使用上的不同.9实例九:()的使
21、用,这里不能使用口要求:字符串的分割代码如下:string str=h10 元 1000 人民币 10000 元 100000rmb”;str=str.replaceaii(”(元|人民币|rmb)”,”¥”);system.out.pri ntln(str);上例中,模式“(元|人民币|rmb广匹配元人民币,rmb中的 任意一个,替换部分表示第一个组匹配的部分不变,其余组 替换成¥.替换后的 str 为¥10 ¥1000 ¥10000 ¥10000010.实例十:parttem类的compile方法的使用matcher类的find方
22、法的使用要求:替换匹配后的字符串代码如下:pattern p = ppile(hm(o+)n,f,pattern.case_insensitive); /不区分大小写 /用pattern类的matcher。方法生成一个matcher对象matcher m = p.matcher(,fmoon mooon mon mooooon mooort);stringbuffer sb = new stringbuffer();/使用find()方法查找第一个匹配的对彖boolean result = m.find();使用循坏找出模式肚配的内容替换之,再将内容加到sb里while (result) m.
23、appendreplacement(sb, "moon"); 把找到的内容替换成 moonresult = m.find();/最后调用appendtail()方法将最后一次匹配后的剩余字符串加到sb里;m.appendtail(sb);system, out. printin(”替换后内容是” + sb.tostring();上面要匹配的5个字符串都符合正则表达式。运行结果出现:5个moon字符11.实例一: 的使用除了用+表示一次或多次,*表示0次或多次,?表示0次或一 次外,还可以用来指定精确指定出现的次数,x2,5表示 x最少出现2次,最多出现5次;x2,表示x最少
24、出现2次, 多则不限;x5表示x只精确的出现5次.要求:匹配字符串代码如下:string dataarr = "google”,”gooogle”,"gooooogle”,”goooooogle”,”ggle”; for (string str : dataarr) string patternstr = ”g(o2,5)gle”;boolean result = pattern.matches(patternstr, str);if (result) system, out. printing字符串” + str + ”匹配模式"+ patternstr + ”
25、成功”); else system.out.println(”字符串” + str + ”匹配模式” + patternstr + ”失败”);12实例十二:的使用表示从到,如ae等同于abcde代码如下:string dataarr = 叮art, ,ftbnn? "ten", nton,7,twnh;for (string str : dataarr) string regex = ”tacn”;boolean result = pattern.matches(regex, str);if (result) system.out.println(”字符串,+ str +
26、 ”匹配模式” + regex + ”成功”); else system.out.printin("字符串” + str + ”匹配模式"+ regex + "失败”);13.实例十三:不区分大小写匹配.正则表达式默认都是区分大小写的,使用了pattern. case_insensitive则不对大小写进行区分.代码如下:string pattemstr=”ab”;pattern pattern=ppile(patternstr, pattern.case_insensitive);string dataarr = ”ab”, ”ab”,”ab”;for (str
27、ing str : dataarr) matcher matcher=pattern.matcher(str);if(matcher.find()system.out.printin(”字符串” + str + ”匹配模式” + patternstr + ”成功”);14.实例十四:s*代表0到到多个空格 要求:使用正则表达式劈分字符串. 代码如下:注意这里要把复杂的模式写在前面,否则简单模式会先匹配上.string input=h职务=gm薪水=50000 ,姓名=职业经理人;性别=男年龄=45 ”;string pattemstr=n(s*,s*)|(s*;s*)|(s+)“;patter
28、n pattern=ppile(patternstr);string dataarr=pattern.split(input);for (string str : dataarr) system.out.pri ntln(str);15实例十五:matcher的group方法的使用要求:取出尖括号外面的内容代码如下:string regex=”v(w+)>(w+)v/“;pattern pattern=ppile(regex);string input=h<name>bill</name><salary>50000</salary><
29、title>gm</title>m;matcher matcher=pattern.matcher(input);while(matcher.fi nd()system.out.pri ntln(matcher.group(2);这题还是有点复杂的!输出结果为:b订150000 gmgroup (2)代表的是第二部分的w+如果group (1)代表的是第一部分的w+ 如果group (0)代表的是整个匹配的字符串实例十六:和+的使用要求:将单词数字混合的字符串的单词部分大写.代码如下:string regex=n(a-za-z+0-9+)n;pattern pattern=p
30、atterrkcompile(regex);string input="age45 salary500000 50000 title'1;matcher matcher=pattern.matcher(input);stringbuffer sb=new stringbuffer();while(matcher.fi nd()string replacement=matcher.group(1).touppercase();matcher.appendreplacement(sb, replacement);matcher.appendt ail(sb);system.out
31、.println(h 替换完的字串为 ”+sb.tostring();输出结果:age45 salary500000 50000 title五.一个检验ema订地址的小程序:最后我们来看一个检验email地址的例程,该程序是用来检 验一个输入的email地址里所包含的字符是否合法,虽然这 不是一个完整的email地址检验程序,它不能检验所有可能 出现的情况,但在必要时您可以在其基础上增加所需功能。import java.util.regex.*;public class email public static void main(string args) throws exception seanner seanner=new seann
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电网基建工程勘察设计合同书
- 加工承揽合同答辩完整版样本
- 代理车辆购买协议书
- 钢轮压路机租赁合同
- 道路清洁工劳动合同
- 工程项目资料管理制度
- 火车票背面广告发布合同简单版样式
- 福建省福州市福州九县一中2023-2024学年高二下学期期中联考政治试题
- 工程项目现场管理制度
- 人教版高中化学选修五试题第四章生命中的基础有机化学物质第1节课堂
- 群文阅读:童话中的不可思议 (教学实录)
- 脑出血合并深静脉血栓的护理
- 2023医院反恐防暴应急演练脚本
- 2023年高考语文 真题新课标I卷现代文阅读II《给儿子》小说精读范读
- 苏教版五年级上册科学第2单元第4课《物体的传热本领》教学课件
- 2023学年完整公开课版《花巴掌》
- 2023年生活饮用水卫生知识竞赛题
- 常见传染病课件完整版
- 耳鼻咽喉-头颈外科学:颈部肿块
- 脊髓亚急性联合变性新版培训课件
- 2023年江苏省国信集团有限公司招聘笔试题库及答案解析
评论
0/150
提交评论