还剩5页未读,继续阅读
文本内容:
正则表达式过滤特殊字符java//过滤特殊字符〃只允public staticString StringFilterString str throwsPatternSyntaxException{许字母和数字//String regEx=[Aa-zA-Z0-9];〃清除掉所有特殊字符StringregEx=@#$%八*+=|〜!@#¥%.・・・・・*——+|{}[],—、];Pattern p=Pattern.compileregEx;Matcher m=p.matcherstr;return m.replaceAII,,l,.trim;}@Testpublic voidtestStringFilter throwsPatternSyntaxException{String str=*adCVs*34_a_09_b5*[/435A*城池『$$*.{}+.|.%%**.中国}下面是中文的字符¥……{}【,,/〃34{45[]
12.fd**999System.out.printlnstr;System.out.printlnStringFilterstr;用的是川测试的,当然你可以改成nit main正则表达式学习因为正则表达式是一个很庞杂的体系,此例仅举些入门的概念,更多的Java请参阅相关书籍及自行摸索//反斜杠间隔/t C/U0009换行/n C/uOOOA回车数字等价于非数字等价于[八空白符号非空/r C/uOOOD/d[0-9]/D0-9]/s[/t/n/xOB/f/r]/S白符号[八/t/n/xOB/f/r]/w单独字符[a-zA-Z_0-9]/W非单独字符[Aa-zA-Z_0-9]/f换页符/e Escape一个单词的边界/b一个非单词的边界前一个匹配的结束/B/G八为限制开头八条件限制为以为开头字符java Java$为限制结尾条件限制为以为结尾字符java$java.条件限制除以外任意一个单独字符/n条件限制为后除换行外任意两个字符java..java加入特定限制条件「口」条件限制在小写范围中一个字符[a-z]a toz条件限制在大写范围中一个字符[A-Z]Ato Z条件限制在小写或大写范围中一个字符[a-zA-Z]a toz AtoZ条件限制在小写范围中一个字符[0-9]Oto9条件限制在小写或范围中一个字符[0-9a-z]0to9a toz条件限制在小写或范围中一个字符(交集)[0-9[a-z]]0to9a toz口中加入八后加再次限制条件「[勺」[Aa-z]条件限制在非小写a toz范围中一个字符[AA-Z]条件限制在非大写AtoZ范围中一个字符[Aa-zA-Z]条件限制在非小写a toz或大写AtoZ范围中一个字符[A0-9]条件限制在非小写Oto9范围中一个字符[A0-9a-z]条件限制在非小写0to9或a toz范围中一个字符[A0-9[a-z]]条件限制在非小写0to9或a toz范围中一个字符(交集)在限制条件为特定字符出现次以上时,可以使用「*」0个以上J*0J个以上任意字符.*0与之间个以上任意字符J.*D JD0在限制条件为特定字符出现次以上时,可以使用「+」1个以上J+1J・+1个以上任意字符与之间个以上任意字符J.+D JD1在限制条件为特定字符出现有或次以上时,可以使用「?」01或者出现JA JJA限制为连续出现指定次数字符「{」a}J{2}JJJ{3}JJJ文字个以上,并且「{」a a,}」,(次以上并存)J{3J JLUJJJ,JJJJ3J文字个以上,个以下b r{a,b}J或或J{3,5}JJJ JJJJJJJJJ两者取一或J|A JA或Java|Hello JavaHello「」中规定一个组合类型比如,我查询中间的数据,可写作a href=/index.html/index/a ahrefx/aa.*href=/.*/.+/a在使用函数时,可以加入控制正则表达式的匹配行为的参数Pattern.compilePattern Pattern.compileString regex,int flag的取值范围如下flag当且仅当两个字符的”正规分解者完全相同Pattern.CANON_EQ canonicaldecomposition R的情况下,才认定匹配比如用了这个标志之后,表达式,/uO3OA”会匹配”默认情况下,不考虑11规范相等性canonical equivalence1^默认情况下,大小写不明感的匹配只适用于字符集Pattern.CASEJNSENSITIVEi US-ASCII这个标志能让表达式忽略大小写进行匹配要想对字符进行大小不明感的匹配,只要Unicode将与这个标志合起来就行了UNICODE_CASE在这种模式下,匹配时会忽略正则表达式里的空格字符译者注:不是Pattern.COMMENTSx指表达式里的“〃s”,而是指表达式里的空格,tab,回车之类注释从#开始,一直到这行结束可以通过嵌入式的标志来启用行模式Unix在这种模式下,表达式?可以匹配任意字符,包括表示一行的结束符默认Pattern.DOTALLs情况下,表达式’「不匹配行的结束符Pattern.MULTILINE在这种模式下,公和分别匹配一行的开始和结束此外,如仍然匹配字符串的开m S始,也匹配字符串的结束默认情况下,这两个表达式仅仅匹配字符串的开始和结束SPattern.UNICODE_CASE在这个模式下,如果你还启用了标志,那么它会对字符进u CASEJNSENSITIVEUnicode行大小写不明感的匹配默认情况下,大小写不敏感的匹配只适用于字符集US-ASCII在这个模式下,只有才被认作一行的中止,并且与,\以及Pattern.UNIX_LINESd/n进行匹配S抛开空泛的概念,下面写出几个简单的正则用例Java比如,在字符串包含验证时♦〃查找以开头,任意结尾的字符串JavaPattern pattern=Pattern.compilel,AJava.*;Matcher matcher=pattern.matcherHJava不是人”;boolean b=matcher.matches;〃当条件满足时,将返回否则返回true,falseSystem.out.printlnb;以多条件分割字符串时♦Pattern pattern=Pattern.compile[,|]+;String[]strs=pattern.splitJava Hello World Java,Hello„World|Sun;for inti=O;istrs.length;i++{System.out.printlnstrs[i];文字替换首次出现字符♦Pattern pattern=Pattern.compile正贝ij表达式”;正贝!表达式正则表达式Matcher matcher=pattern.matcher JHello World,Hello World;〃替换第一个符合正则的数据System.out.printlnmatcher.replaceFirst,,Java,,;文字替换全部♦“正贝表达式”;Pattern pattern=Pattern.compile I正则表达式正则表达式Matcher matcher=pattern.matcher Hello World,Hello World;〃替换第一个符合正则的数据System.out.printlnmatcher.replaceAIIJava;文字替换置换字符♦正贝表达式”;Pattern pattern=Pattern.compile ij正贝」表达式正则表达式Matcher matcher=pattern.matcher IHelloWorld,HelloWorld;StringBuffer sbr=new StringBuffer;while matcher.findO{matcher.appendReplacementsbr,Java;matcher.appendTailsbr;System.out.printlnsbr.toString;验证是否为邮箱地址♦String str=ceponline@yahoo.com.cn;Pattern patternPattern.compile,[//w//.//-]+@[//w//-]+//.+[//w//-]+,Pattern.CASE_INSENSITIVE;Matcher matcher=pattern.matcherstr;System.out.printlnmatcher.matches;去除标记♦htmlPattern pattern=Pattern.compile.+Pattern.DOTALL;/Matcher matcher=pattern.matchera href=/index.html/i^/a;String string=matcher.replaceAII;System.out.printlnstring;查找中对应条件字符串♦htmlPattern pattern=Pattern.compilehref=/.+/;Matcher matcher=pattern.matchera href=/”仍^・八皿/主页/3;ifmatcher.findSystem.out.printlnmatcher.groupl;截取〃地址♦http:〃截取urlPattern pattern=Pattern.compilehttp://|https://{l}[//w//.//-/*]+;Matcher matcher=pattern.matcherdsdsdshttp://dsds//gfgffdfdfdf,,;StringBuffer buffer=new StringBuffer;whilematcher.find{buffer.appendmatcher.group;buffer.append/r/n;System.out.printlnbuffer.toStringO;替换指定中文字♦目前的发展史是由年-年”;Stringstr=Java{0}{1}String[][]object={new String[]{7/{0//}H,1995},new String[]{”〃{l〃}“,”2007”}};System.out.printlnreplacestr object;public staticString replacefinalString sourceStringObject[]object{String temp=sourceString;forint i=0;iobject.length;i++{String[]result=String[]object[i];Pattern pattern=Pattern.compileresult
[0];Matcher matcher=pattern.matchertemp;temp=matcher.replaceAIIresult[l];return temp;以正则条件查询指定目录下文件♦〃用于缓存文件列表private ArrayListfiles=new ArrayList;〃用于承载文件路径private String_path;〃用于承载未合并的正则公式private String_regexp;class MyFileFilterimplements FileFilter{*匹配文件名称*/public booleanacceptFile file{try Patternpattern=Pattern.compile_regexp;Matcher match=pattern.matcherfile.getName;return match.matches;}catch Exceptione{return true;/***解析输入流*@param inputs*/FilesAnalyze Stringpath,String regexp{getFileNamepath,regexp;}*分析文件名并加入files*@param input*/〃目录private voidgetFileNameString path,String regexp{_path=path;_regexp=regexp;File directory=new File_path;File[]filesFile=directory.listFilesnew MyFileFilter;if filesFile==null return;for intj=0;jfilesFile.length;j++{files.addfilesFile[j];return;/***显示输出信息*@param out*/public voidprint Printstreamout{Iterator elements=files.iterator;while elements.hasNext{File file=File elements.next;out.printlnfile.getPath;public staticvoid outputStringpath,String regexp{FilesAnalyze fileGroupl=new FilesAnalyzepath,regexp;fileGroupl.printSystem.out;}public staticvoid mainString[]args{output,,C://,,,,,[A-z|.]*H;。