《2022年正则表达式 .pdf》由会员分享,可在线阅读,更多相关《2022年正则表达式 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、正则表达式-REGEX 很多人都知道正则表达式,知道它强大的功能.有些人会写,却不知道怎么用;甚至有些人连正则表达式都还不会写.只要你曾经学会了一门语言中的正则表达式的使用,那么相信Java中的正则表达式也不难,其他语言用法也不离其终.下面我一一给大家讲解.正则表达式和Java语法没有关系,它是 JDK1.4版本引入的内容,Java中对正则表达式的操作被封装在几个类中.有 java.util.regex.Pattern,java.util.regex.Matcher.正则表达市的介绍:1.可以使用字符作为一个通配符来代替除换行符(n)之外的任意一个字符,例如:.at可以与cat,sat,mat
2、等匹配.通常,这种通配符用于操作系统中文件名匹配.2.a-zat,任何含在 中的内容都是一个字符,只匹配一个字符.如:a-zA-Z代表所有大小写字母.3.a-z.匹配任何不属于a-z中的字符.4.a-z&hij.匹配 hij任何一个(交集)5.s.匹配空字符(空格,tab,n,换页,回车)6.S.匹配非空字符(和s一样)7.d.匹配数字,相当于 0-9 8.D.匹配非数字,相当于 0-9,匹配中文,空格,换行符9.w.匹配词字符,相当于 a-zA-Z0-9,不包含中文,不能代表空格,换行符10.W.匹配非词字符,相当于 w,匹配一个中文字逻辑运算符:|:管道符.如:x|y表示 x 或 y():
3、捕获组.(abc)|(xyz)表示 abc 或 xyz 边界匹配符:从头匹配名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -$:从尾匹配b:词界.B.非词界量词:量词描述一个模式吸收输入文本的方式.*:前面字符或组匹配0 或多个+:前面字符或组匹配1 或多个?:前面字符或组匹配0 或 1 个n:前面字符或组的数量为n 个n,:前面字符或组的数量至少n 个n,m:前面字符或组数量至少n 个,最多 m个Java中正则表达式匹配过程:Pattern 设定正则表达式 java.util.regex Matcher 利用 Pattern对象所包含的正则表达式来作字符匹配工作pu
4、blic static Pattern compile(String regex)public static Pattern compile(String regex,int flags)flags为匹配模式:CASE_INSENSITIVE(?i):不区分大小写模式.DOTALL(?s):参数是让正则表达式.去匹配任何的字符,包括换行符号(默认情况下,不能匹配换行符).MULTILINE(?m):在多行模式下,和$分别匹配一行的开始和结束.还匹配输入字符名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -串的开头,而$还匹配输入字符串的结尾UNIX_LINES(?d):
5、多行模式下匹配.,$时只识别行结束符n UNICODE_CASE(?u):当指定这个标记,并且开启了CASE_INSENSITIVE时,大小写不敏感的匹配将按照与unicode标准相一致的方式进行.我们可以在Pattern中同时应用多种模式,他们中间用|或+类分隔.public Matcher matcher(CharSequence input)根据参数来创建一个Matcher类对象.input:要进行匹配的字符串.publc static boolean matches(String regex,CharSequence input)查看第二个参数给出的字符串是否匹配第一个参数的正则表达式
6、.public String split(CharSequence input)根据编译进入Pattern对象的正则表达式将参数给出的字符串进行拆分,拆分后的每一个部分都放在返回的数组中.public String split(CharSequence input,int limit)根据编译进入Pattern对象的正则表达式将参数给出的字符串进行拆分,拆分后的每一部分放在返回的数组中.limit是用来控制Pattern模式应用到第二个参数的次数(即正则表达式在字符串中引用limit次)如:String regex=http:/|.;Pattern p=Ppile(regex);String
7、ret=p.split(http:/);for(int i=0;i ret.length;i+)本文来自CSDN博客,转载请标明出处:http:/ 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a 到 z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。自从 jdk1.4推出 java.util.regex包,就为我们提供了很好的JAVA 正则表达式应用平台。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -因为正则
8、表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。反斜杠t 间隔 (u0009)n 换行 (u000A)r 回车 (u000D)d 数字等价于 0-9 D 非数字等价于 0-9 s 空白符号 tnx0Bfr S 非空白符号 tnx0Bfr w 单独字符 a-zA-Z_0-9 W 非单独字符 a-zA-Z_0-9 f 换页符e Escape b 一个单词的边界B 一个非单词的边界G 前一个匹配的结束 为限制开头java 条件限制为以Java为开头字符$为限制结尾java$条件限制为以java为结尾字符.条件限制除 n以外任意一个单独字符java.条件限制为jav
9、a后除换行外任意两个字符加入特定限制条件a-z 条件限制在小写a to z范围中一个字符A-Z 条件限制在大写A to Z范围中一个字符a-zA-Z 条件限制在小写a to z或大写 A to Z范围中一个字符0-9 条件限制在小写0 to 9范围中一个字符0-9a-z 条件限制在小写0 to 9或 a to z范围中一个字符0-9a-z 条件限制在小写0 to 9或 a to z范围中一个字符(交集)中加入 后加再次限制条件a-z 条件限制在非小写a to z范围中一个字符A-Z 条件限制在非大写A to Z范围中一个字符a-zA-Z 条件限制在非小写a to z或大写 A to Z范围中一
10、个字符0-9 条件限制在非小写0 to 9范围中一个字符0-9a-z 条件限制在非小写0 to 9或 a to z范围中一个字符0-9a-z 条件限制在非小写0 to 9或 a to z范围中一个字符(交集)在限制条件为特定字符出现0 次以上时,可以使用*名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -J*0个以上 J.*0个以上任意字符J.*D J与 D 之间 0 个以上任意字符在限制条件为特定字符出现1 次以上时,可以使用+J+1个以上 J.+1个以上任意字符J.+D J与 D 之间 1 个以上任意字符在限制条件为特定字符出现有0 或 1 次以上时,可以使用?JA
11、?J或者 JA 出现限制为连续出现指定次数字符aJ2 JJ J3 JJJ 文字 a 个以上,并且a,J3,JJJ,JJJJ,JJJJJ,?(3次以上 J 并存)文字个以上,b 个以下 a,bJ3,5 JJJ或 JJJJ或 JJJJJ 两者取一|J|A J或 A Java|Hello Java或 Hello()中规定一个组合类型比如,我查询index中间的数据,可写作(.+?)在使用 Ppile函数时,可以加入控制正则表达式的匹配行为的参数:Pattern Ppile(String regex,int flag)flag的取值范围如下:Pattern.CANON_EQ 当且仅当两个字符的 正规分
12、解(canonical decomposition)都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式au030A会匹配?。默认情况下,不考虑 规 范相等性(canonical equivalence)。Pattern.CASE_INSENSITIVE(?i)默 认 情 况 下,大 小 写 不 明 感 的 匹 配 只 适 用 于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹配,只要将UNICODE_CASE 与这个标志合起来就行了。Pattern.COMMENTS(?x)在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译
13、者注:不是指表达式里的s,而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。Pattern.DOTALL(?s)在这种模式下,表达式.可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式.不匹配行的结束符。Pattern.MULTILINE(?m)在这种模式下,和$分别匹配一行的开始和结束。此外,仍然匹配字符串名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -的开始,$也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。Pattern.UNICODE_CASE(?u)在这个模式下,
14、如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集。Pattern.UNIX_LINES(?d)在这个模式下,只有 n才被认作一行的中止,并且与.,以及$进行匹配。抛开空泛的概念,下面写出几个简单的Java正则用例:比如,在字符串包含验证时/查找以 Java开头,任意结尾的字符串 Pattern pattern=Ppile(Java.*);Matcher matcher=pattern.matcher(Java不是人);boolean b=matcher.matches();/当条
15、件满足时,将返回true,否则返回false System.out.println(b);以多条件分割字符串时Pattern pattern=Ppile(,|+);String strs=pattern.split(Java Hello World Java,Hello,World|Sun);for(int i=0;istrs.length;i+)System.out.println(strsi);文字替换(首次出现字符)Pattern pattern=Ppile(正则表达式);Matcher matcher=pattern.matcher(正则表达式 Hello World,正则表达式 He
16、llo World);/替换第一个符合正则的数据System.out.println(matcher.replaceFirst(Java);文字替换(全部)Pattern pattern=Ppile(正则表达式);Matcher matcher=pattern.matcher(正则表达式 Hello World,正则表达式 Hello World);/替换第一个符合正则的数据System.out.println(matcher.replaceAll(Java);文字替换(置换字符)名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 10 页 -Pattern pattern=Ppil
17、e(正则表达式);Matcher matcher=pattern.matcher(正则表达式 Hello World,正则表达式 Hello World);StringBuffer sbr=new StringBuffer();while(matcher.find()matcher.appendReplacement(sbr,Java);matcher.appendTail(sbr);System.out.println(sbr.toString();验证是否为邮箱地址String str=;Pattern pattern=Ppile(w.-+(w-+.)+w-+,Pattern.CASE_I
18、NSENSITIVE);Matcher matcher=pattern.matcher(str);System.out.println(matcher.matches();去除 html标记Pattern pattern=Ppile(,Pattern.DOTALL);Matcher matcher=pattern.matcher(主页);String string=matcher.replaceAll();System.out.println(string);查找 html中对应条件字符串Pattern pattern=Ppile(href=(.+?);Matcher matcher=patt
19、ern.matcher(主页);if(matcher.find()System.out.println(matcher.group(1);截取 http:/地址/截取 url Pattern pattern=Ppile(http:/|https:/)1w.-/:+);Matcher matcher=pattern.matcher(dsdsdsfdf);StringBuffer buffer=new StringBuffer();while(matcher.find()buffer.append(matcher.group();buffer.append(rn);System.out.print
20、ln(buffer.toString();名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页 -替换指定 中文字String str=Java目前的发展史是由0年-1年;String object=new String0,1995,new String1,2007;System.out.println(replace(str,object);public static String replace(final String sourceString,Object object)String temp=sourceString;for(int i=0;iobject.leng
21、th;i+)String result=(String)objecti;Pattern pattern=Ppile(result0);Matcher matcher=pattern.matcher(temp);temp=matcher.replaceAll(result1);return temp;以正则条件查询指定目录下文件/用于缓存文件列表 private ArrayList files=new ArrayList();/用于承载文件路径 private String _path;/用于承载未合并的正则公式 private String _regexp;class MyFileFilter
22、 implements FileFilter /*匹配文件名称 */public boolean accept(File file)try Pattern pattern=Ppile(_regexp);Matcher match=pattern.matcher(file.getName();return match.matches();catch(Exception e)return true;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -/*解析输入流 *param inputs */FilesAnalyze(String path,String regexp)g
23、etFileName(path,regexp);/*分析文件名并加入files *param input */private void getFileName(String path,String regexp)/目录 _path=path;_regexp=regexp;File directory=new File(_path);File filesFile=directory.listFiles(new MyFileFilter();if(filesFile=null)return;for(int j=0;j filesFile.length;j+)files.add(filesFilej
24、);return;/*显示输出信息 *param out */public void print(PrintStream out)Iterator elements=files.iterator();while(elements.hasNext()File file=(File)elements.next();out.println(file.getPath();public static void output(String path,String regexp)FilesAnalyze fileGroup1=new FilesAnalyze(path,regexp);fileGroup1.print(System.out);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -public static void main(String args)output(C:,A-z|.*);Java正则的功用还有很多,事实上只要是字符处理,就没有正则做不到的事情存在。(当然,正则解释时较耗时间就是了|)本文来自CSDN博客,转载请标明出处:http:/ 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -