正则表达式ppt课件.ppt

上传人:飞****2 文档编号:29993381 上传时间:2022-08-03 格式:PPT 页数:15 大小:183.01KB
返回 下载 相关 举报
正则表达式ppt课件.ppt_第1页
第1页 / 共15页
正则表达式ppt课件.ppt_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《正则表达式ppt课件.ppt》由会员分享,可在线阅读,更多相关《正则表达式ppt课件.ppt(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、5.7 5.7 正则表达式正则表达式5.7.1 基础知识基础知识1正则表达式简介正则表达式简介(1)验证验证。检验输入字符串是否符合某个给定的模式。例如,校验一个电话号码是否遵循格式“(000)0000-0000”(此处的0表示一个数字)。(2)解析解析。分析输入字符串以分解出它所包含的要素。例如,用模式“(*):(*)”分解出在HTTP头中普遍应用的“Key:Value”格式的头信息。(3)文本处理文本处理。应用程序常常需要有文本处理功能,比如单词的查找替换、电子邮件的格式化或XML文档的集成等,这些操作通常会涉及模式匹配的问题,要借助正则表达式。5.7.1 5.7.1 基础知识基础知识2特

2、殊字符特殊字符在正则表达式中,一些字符具有特殊含义,参见表5.5。特 殊 字 符含 义abca、b和c的任意一个字符abc除了a、b和c之外的任意字符(否定)a-zA-Z从a到z或从A到Z的任意字符(范围)abchij任意a、b、c、h、i和j字符(并集)a-z&hij任意h、i或j(交集)s空白符(空格、tab、换行或回车)S非空白符(s)d数字0-9D非数字0-9w单词字符(数字0-9、26个英文字母和下画线_).除换行符n之外的任何一个字符(要匹配“.”字符本身,请使用“.”)反斜线字符uhhhh十六进制表示的unicode值为hhhh的字符5.7.1 5.7.1 基础知识基础知识以下对

3、表5.5中的每一个特殊字符列举一个示例,如下:System.out.println(b.matches(abc);/ 打印trueSystem.out.println(b.matches(abc);/ 打印falseSystem.out.println(A.matches(a-zA-Z);/ 打印trueSystem.out.println(A.matches(a-zA-Z);/ 打印trueSystem.out.println(R.matches(A-Z&RFG);/ 打印trueSystem.out.println(nt.matches(s2);/ 打印trueSystem.out.pri

4、ntln( .matches(S);/ 打印falseSystem.out.println(3.matches(d);/ 打印trueSystem.out.println(&.matches(D);/ 打印trueSystem.out.println(a_8.matches(w3);/ 打印trueSystem.out.println(n.matches(.);/ 打印falseSystem.out.println(u0041.matches(A);/ 打印true5.7.1 5.7.1 基础知识基础知识3量词量词量词决定表达式将被匹配的次数,以简化表达式的编写,表5.6列出了一些量词所表示字

5、符的出现次数。量 词描 述X*0个或多个X(最大匹配)X+1个或多个X(最大匹配)X?0个或1个X(最大匹配)Xn恰好n个XXn,至少n个XXn,m至少n个X,不多于m个XX*?0个或多个X(最小匹配)X+?1个或多个X(最小匹配)X?0个或1个X(最小匹配)XYX后跟YX|YX或Y(X)定义捕获组n与第n个捕获组相匹配的字串5.7.1 5.7.1 基础知识基础知识以下就表5.6中的几个典型量词列举一些示例,如下:System.out.println(aaaa.matches(a*);/ 打印trueSystem.out.println(aaaa.matches(a+);/ 打印trueSys

6、tem.out.println(aaaa.matches(a?);/ 打印falseSystem.out.println(.matches(a?);/ 打印trueSystem.out.println(aaaa.matches(a4);/ 打印trueSystem.out.println(abcabcabc.matches(abc)2,);/ 打印trueSystem.out.println(4563456257.matches(d3,10);/ 打印true5.7.1 5.7.1 基础知识基础知识4常用表达式设计下面的位置匹配,用于匹配串中的位置。(1)(?=X):与这样的位置相匹配,其右部

7、能匹配X。(2)(?!X):与这样的位置相匹配,其右部不能匹配X。(3)(?=X):与这样的位置相匹配,其左部能匹配X。(4)(?!X):与这样的位置相匹配,其左部不能匹配X。5.7.1 5.7.1 基础知识基础知识运用以上正则式规则,可设计如下常用的正则表达式。(1)数字串数字串:d+,在Java中表示为“d+”。(2)英文单词英文单词:a-z A-Z+,在Java中表示为“a-z A-Z+”。(3)一个汉字一个汉字:u4e00- u9fa5,在Java中表示为“u4e00-u9fa5”。(4)汉字串汉字串:u4e00- u9fa5+,在Java中表示为“u4e00-u9fa5+”。(5)I

8、P地址地址:(d1,3.)3d1,3,在Java中表示为“(d1,3.)3d1,3”。(6)重复字符压缩重复字符压缩:将字符串中连续重复的字符压缩成一个。 例如,“aaabbbcccddd11122+*33”压缩成“abcd12+*.3”。相关代码是:设String s = “”;;则String rs = s.replaceAll(“(.)(1)*”, “$1”);。(7)特定子串提取特定子串提取:例如,String s = %.%CXLL=add1,31,123.12%CXLL=add2,32,124% CXLL=,33,125.12%LL=-121.11;从中提取出%CXLL=add1,

9、31,123,123.12,%CXLL=add2,32,124.12,%CXLL=,33,125.12。提取的正则式设计成“%CXLL=.*?(?=%)”,Java中表示为“%CXLL=.*?(?=%)”。(8)串格式串格式:不能以bug打头但可以由字母、数字组成的812个数的字符串。正则式为“(?!bug)a-zA-Z0-98-12”。5.7.1 5.7.1 基础知识基础知识(2)Matcher类类Matcher类的实例用于根据给定的模式,对字符串进行匹配。使用CharSequence接口把输入的字符串提供给匹配器,以便支持来自不同输入源的字符串的匹配。当创建了匹配器之后,就可以用它来执行以

10、下3类不同的匹配操作: matches()方法试图根据此模式,对整个输入序列进行匹配。 lookingAt()方法试图根据此模式,从开始处对输入序列进行匹配。 find()方法将扫描输入序列,寻找下一个与此模式匹配的地方。5.7.2 5.7.2 正则表达式的应用正则表达式的应用1字符串匹配字符串匹配【例5.12】使用正则表达式匹配输入的字符串。打开“Run Configurations”窗口,配置程序运行时的输入参数,在“Arguments”标签页的“Program arguments”栏输入“abcabcabcdefabc abc+ (abc)+ (abc)2,”,然后单击“Run”按钮运行

11、程序,结果为:Input: abcabcabcdefabcRegular expression: abcabcabcdefabcMatch abcabcabcdefabc at positions 0-14Regular expression: abc+Match abc at positions 0-2Match abc at positions 3-5Match abc at positions 6-8Match abc at positions 12-14Regular expression: (abc)+Match abcabcabc at positions 0-8Match abc

12、 at positions 12-14Regular expression: (abc)2,Match abcabcabc at positions 0-8例5.12 TestRegex.javaimport java.util.regex.*;public class TestRegex public static void main(String args) if (args.length 2) System.out.println(Usage:njava TestRegex + characterSequence regularExpression+);System.exit(0);Sy

13、stem.out.println(Input: + args0 + );for (String arg : args) System.out.println(Regular expression: + arg + );Pattern p = Ppile(arg);Matcher m = p.matcher(args0);while (m.find() System.out.println(Match + m.group() + at positions + m.start() + - + (m.end() - 1);5.7.2 5.7.2 正则表达式的应用正则表达式的应用2字符串分析字符串分析

14、【例5.13】用正则表达式对一个由数字和非数字组成的字符串进行分析,要求:将其中每段连续的数字字符转换成一个整数,若连续的数字字符个数超过4个,则以4个数字为一组进行转换,转换生成的整数依次存入整型数组中。例如,对“c789yz45!786*+56abc123456789”分析后得到的数组内容为:789、45、786、56、1234、5678、9。程序运行结果:7894578656123456789例5.13 GetNumber.javaimport java.util.regex.*;public class GetNumber public static void main(String

15、args) int arr = new int10;/ 创建1个整型数组Pattern p = Ppile(d1,4);/ 编译正则表达式,要求1个到4个数字String s = c789yz45!786*+56abc123456789;Matcher m = p.matcher(s);/ 对字符串进行匹配int i =0;while(m.find() / 寻找与指定模式匹配的下一个子序列int j = 0;j = Integer.parseInt(m.group();/ 将字符串类型转换为整型arri= j;i+;for(int c = 0;ci;c+) System.out.println

16、(arrc);/ 打印数组的内容5.7.2 5.7.2 正则表达式的应用正则表达式的应用3文本替换文本替换正则表达式最擅长于替换文本,有多种方法实现,如下。replaceFirst(String replacement):以repacement替换掉第一个匹配成功的部分。replaceAll(String replacement):以repacement替换掉所有匹配成功的部分。appendReplacement(StringBuffer buf, String replacement):执行渐进式替换,允许再调用其他方法来生成或处理repacement,能够以编程的方式将目标分隔成组,从而实

17、现更为强大的替换功能。appendTail(StringBuffer buf):在执行了一次或多次appendReplacement()之后,调用此方法可以将输入字符串余下的部分复制到buf中。【例5.14】将字符串奇数序列的“java”替换为小写,偶数序列的“java”替换成大写。程序运行结果:java JAVA java JAVA I love java you dislike JAVA例5.14 TestReplaceimport java.util.regex.*;public class TestReplace public static void main(String args)

18、 Pattern p = Ppile(java, Pattern.CASE_INSENSITIVE); / 不区分大小写Matcher m = p.matcher(Java java JAva JAVA I love JAVA you dislike Java );StringBuffer buf = new StringBuffer();int i=0;while(m.find() i+;if(i%2 = 0) m.appendReplacement(buf, JAVA); / 偶数序列的转换成大写 else m.appendReplacement(buf, java); / 奇数序列的转换

19、成小写m.appendTail(buf);System.out.println(buf);5.7.2 5.7.2 正则表达式的应用正则表达式的应用4Scanner定界符定界符在默认情况下,Scanner根据空白字符对输入进行分词,也可以用正则表达式指定自己所需的定界符。【例5.15】使用“.”作为IP地址的定界符。TestScanner.javaimport java.util.*;public class TestScanner public static void main(String args)Scanner scanner = new Scanner(192.168.1.99);scanner.useDelimiter(s*.s*);/ 使用.作为定界符while(scanner.hasNextInt()System.out.println(scanner.nextInt();程序运行结果:192168199

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁