配色: 字号:
java正则表达式过滤特殊字符
2017-03-31 | 阅:  转:  |  分享 
  
java正则表达式过滤特殊字符//?过滤特殊字符??public?static?String?StringFilter(String???s
tr)throws?PatternSyntaxException???{?//?只允许字母和数字??//?String???reg
Ex?=?"[^a-zA-Z0-9]";?//?清除掉所有特殊字符??String?regEx="[`~!@#$%^&()+=|
{}'':;'',//[//].<>/?~!@#¥%……&()——+|{}【】‘;:”“’。,、?]";?Pattern???p??
?=Pattern.compile(regEx);?Matcher???m???=p.matcher(str);?return?m
.replaceAll("").trim();?}?@Test??public?void?testStringFilter()th
rows?PatternSyntaxException???{?Stringstr?=???"adCVs34_a?_09_b5
[/435^&城池()^$$&).{}+.|.)%%(.中国}34{45[]12.fd''&999下面是中文的字符¥……
{}【】。,;’“‘”?";?System.out.println(str);?System.out.println(String
Filter(str));?}用的是JUnit测试的,当然你可以改成main?Java正则表达式学习:?因为正则表达式是一个很庞杂
的体系,此例仅举些入门的概念,更多的请参阅相关书籍及自行摸索。?//反斜杠?/t间隔(''/u0009'')?/n换行(''/
u000A'')?/r回车(''/u000D'')?/d数字等价于[0-9]?/D非数字等价于[^0-9]?/s空白符号
[/t/n/x0B/f/r]?/S非空白符号[^/t/n/x0B/f/r]?/w单独字符[a-zA-Z_0-9]?/W非
单独字符[^a-zA-Z_0-9]?/f换页符?/eEscape?/b一个单词的边界?/B一个非单词的边界?/G前一个
匹配的结束?^为限制开头?^java条件限制为以Java为开头字符?$为限制结尾?java$条件限制为以java为结尾字符?.条
件限制除/n以外任意一个单独字符?java..条件限制为java后除换行外任意两个字符?加入特定限制条件「[]」?[a-z]条件限
制在小写atoz范围中一个字符?[A-Z]条件限制在大写AtoZ范围中一个字符?[a-zA-Z]条件限制在小写ato
z或大写AtoZ范围中一个字符?[0-9]条件限制在小写0to9范围中一个字符?[0-9a-z]条件限制在小写0to
9或atoz范围中一个字符?[0-9[a-z]]条件限制在小写0to9或atoz范围中一个字符(交集)?[]中加入^
后加再次限制条件「[^]」?[^a-z]条件限制在非小写atoz范围中一个字符?[^A-Z]条件限制在非大写AtoZ范围中
一个字符?[^a-zA-Z]条件限制在非小写atoz或大写AtoZ范围中一个字符?[^0-9]条件限制在非小写0to
9范围中一个字符?[^0-9a-z]条件限制在非小写0to9或atoz范围中一个字符?[^0-9[a-z]]条件限制在
非小写0to9或atoz范围中一个字符(交集)?在限制条件为特定字符出现0次以上时,可以使用「」?J????0个以上
J?.????0个以上任意字符?J.D????J与D之间0个以上任意字符?在限制条件为特定字符出现1次以上时,可以使用「+
」?J+????1个以上J?.+????1个以上任意字符?J.+D????J与D之间1个以上任意字符?在限制条件为特定字符出
现有0或1次以上时,可以使用「?」?JA?????J或者JA出现?限制为连续出现指定次数字符「{a}」?J{2}????JJ?
J{3}????JJJ?文字a个以上,并且「{a,}」?J{3,}????JJJ,JJJJ,JJJJJ,???(3次以上J并存
)?文字个以上,b个以下「{a,b}」?J{3,5}????JJJ或JJJJ或JJJJJ?两者取一「|」?J|A????J或A
?Java|HelloJava或Hello?「()」中规定一个组合类型?比如,我查询>index中间的数据,可写作(.+?)?在使用Patte
rn.compile函数时,可以加入控制正则表达式的匹配行为的参数:?PatternPattern.compile(String
regex,intflag)?flag的取值范围如下:?Pattern.CANON_EQ当且仅当两个字符的"正规分解(ca
nonicaldecomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a/u030A"会匹配
"?"。默认情况下,不考虑"规范相等性(canonicalequivalence)"。?Pattern.CASE_INSENS
ITIVE(?i)默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Uni
code字符进行大小不明感的匹配,只要将UNICODE_CASE与这个标志合起来就行了。?Pattern.COMMENTS(?x
)在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"//s",而是指表达式里的空格,tab,回车之类
)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。?Pattern.DOTALL(?s)在这种模式下,表
达式''.''可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式''.''不匹配行的结束符。?Pattern.MULTILINE?
(?m)在这种模式下,''^''和''$''分别匹配一行的开始和结束。此外,''^''仍然匹配字符串的开始,''$''也匹配字符串的结束。默认情况
下,这两个表达式仅仅匹配字符串的开始和结束。?Pattern.UNICODE_CASE?(?u)在这个模式下,如果你还启用了CAS
E_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-A
SCII字符集。?Pattern.UNIX_LINES(?d)在这个模式下,只有''/n''才被认作一行的中止,并且与''.'',''^'',
以及''$''进行匹配。?抛开空泛的概念,下面写出几个简单的Java正则用例:?◆比如,在字符串包含验证时?//查找以Java开头,任
意结尾的字符串?Patternpattern=Pattern.compile("^Java.");?Matchermat
cher=pattern.matcher("Java不是人");?booleanb=matcher.matches();?
//当条件满足时,将返回true,否则返回false?System.out.println(b);?◆以多条件分割字符串时?Pat
ternpattern=Pattern.compile("[,|]+");?String[]strs=pattern
.split("JavaHelloWorldJava,Hello,,World|Sun");?for(inti=0;i<
strs.length;i++){?System.out.println(strs[i]);?}?◆文字替换(首次出现字符)?
Patternpattern=Pattern.compile("正则表达式");?Matchermatcher=pat
tern.matcher("正则表达式HelloWorld,正则表达式HelloWorld");?//替换第一个符合正则的
数据?System.out.println(matcher.replaceFirst("Java"));?◆文字替换(全部)?Pa
tternpattern=Pattern.compile("正则表达式");?Matchermatcher=patte
rn.matcher("正则表达式HelloWorld,正则表达式HelloWorld");?//替换第一个符合正则的数据
?System.out.println(matcher.replaceAll("Java"));?◆文字替换(置换字符)?Patt
ernpattern=Pattern.compile("正则表达式");?Matchermatcher=pattern
.matcher("正则表达式HelloWorld,正则表达式HelloWorld");?StringBuffersb
r=newStringBuffer();?while(matcher.find()){?matcher.appendR
eplacement(sbr,"Java");?}?matcher.appendTail(sbr);?System.out.pr
intln(sbr.toString());?◆验证是否为邮箱地址?Stringstr="ceponline@yahoo.com
.cn";?Patternpattern=Pattern.compile("[//w//.//-]+@([//w//-]+/
/.)+[//w//-]+",Pattern.CASE_INSENSITIVE);?Matchermatcher=patte
rn.matcher(str);?System.out.println(matcher.matches());?◆去除html标记
?Patternpattern=Pattern.compile("<.+?>",Pattern.DOTALL);?Matc
hermatcher=pattern.matcher("主页");?S
tringstring=matcher.replaceAll("");?System.out.println(string)
;?◆查找html中对应条件字符串?Patternpattern=Pattern.compile("href=/"(.+?)
/"");?Matchermatcher=pattern.matcher("
页");?if(matcher.find())?System.out.println(matcher.group(1));
?}?◆截取http://地址?//截取url?Patternpattern=Pattern.compile("(http:
//|https://){1}[//w//.//-/:]+");?Matchermatcher=pattern.matche
r("dsdsdsfdf");?StringBufferbuffer=new
StringBuffer();?while(matcher.find()){buffer.append(matcher.grou
p());buffer.append("/r/n");System.out.println(buffer.toString())
;?}??◆替换指定{}中文字?Stringstr="Java目前的发展史是由{0}年-{1}年";?String[][]
object={newString[]{"//{0//}","1995"},newString[]{"//{1//}","20
07"}};?System.out.println(replace(str,object));?publicstaticStr
ingreplace(finalStringsourceString,Object[]object){?String
temp=sourceString;for(inti=0;isult=(String[])object[i];?Patternpattern=Pattern.compile(resul
t[0]);?Matchermatcher=pattern.matcher(temp);?temp=matcher.re
placeAll(result[1]);?}?returntemp;?}?◆以正则条件查询指定目录下文件?//用于缓存文件列
表?privateArrayListfiles=newArrayList();?//用于承载文件路径?privat
eString_path;?//用于承载未合并的正则公式?privateString_regexp;??class
MyFileFilterimplementsFileFilter{?/?匹配文件名称?/?publicb
ooleanaccept(Filefile){?try{?Patternpattern=Pattern.comp
ile(_regexp);?Matchermatch=pattern.matcher(file.getName());r
eturnmatch.matches();?}catch(Exceptione){?returntrue;?}?
}?}??/?解析输入流?@paraminputs?/?FilesAnalyze(Stringp
ath,Stringregexp){?getFileName(path,regexp);?}??/?分析文件名并
加入files?@paraminput?/?privatevoidgetFileName(Stringpath
,Stringregexp){?//目录?_path=path;?_regexp=regexp;?Filedirec
tory=newFile(_path);?File[]filesFile=directory.listFiles(n
ewMyFileFilter());?if(filesFile==null)return;?for(intj=
0;jturn;?}??/?显示输出信息?@paramout?/?publicvoidprint(PrintStreamout){?Iteratorelements=files.iterator();?while(elements.hasNext()){?Filefile=(File)elements.next();?out.println(file.getPath());}?}?publicstaticvoidoutput(Stringpath,Stringregexp){?FilesAnalyzefileGroup1=newFilesAnalyze(path,regexp);?fileGroup1.print(System.out);?}??publicstaticvoidmain(String[]args){?output("C://","[A-z|.]");?}?
献花(0)
+1
(本文系关平藏书首藏)