JAVA正则表达式4种常用功能 正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: 以下是代码片段: String str="abc efg ABC"; String regEx="a|f"; //表示a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find();
如果str中有regEx,那么rs为true,否则为flase。如果想在查找时忽略大小写,则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE); 提取:以下是代码片段: String regEx=".+/(.+)$"; String str="c:/dir1/dir2/name.txt"; Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find(); for(int i=1;i<=m.groupCount();i++){ System.out.println(m.group(i)); }
以上的执行结果为name.txt,提取的字符串储存在m.group(i)中,其中i最大值为m.groupCount(); 分割: 以下是代码片段: String regEx="::"; Pattern p=Pattern.compile(regEx); String[] r=p.split("xd::abc::cde"); 执行后,r就是{"xd","abc","cde"},其实分割时还有跟简单的方法: String str="xd::abc::cde"; String[] r=str.split("::");
替换(删除): 以下是代码片段: String regEx="a+"; //表示一个或多个a
Pattern p=Pattern.compile(regEx); Matcher m=p.matcher("aaabbced a ccdeaa"); String s=m.replaceAll("A"); 结果为"Abbced A ccdeA" 如果写成空串,既可达到删除的功能,比如: String s=m.replaceAll(""); 结果为"bbced ccde" 附: /D 等於 [^0-9] 非数字 /s 等於 [ /t/n/x0B/f ] 空白字元 /S 等於 [^ /t/n/x0B/f ] 非空白字元 /w 等於 [a-zA-Z_0-9] 数字或是英文字 /W 等於 [^a-zA-Z_0-9] 非数字与英文字 ^ 表示每行的开头 $ 表示每行的结尾
"^/d+$" //非负整数(正整数 + 0) "^/[0-9/]*/[1-9/]/[0-9/]*$" //正整数 "^((-/d+)/|(0+))$" //非正整数(负整数 + 0) "^-/[0-9/]*/[1-9/]/[0-9/]*$" //负整数 "^-?/d+$" //整数 "^/d+(/./d+)?$" //非负浮点数(正浮点数 + 0) "^((/[0-9/]+/./[0-9/]*/[1-9/]/[0-9/]*)/|(/[0-9/]*/[1-9/]/[0-9/]*/./[0-9/]+)/|(/[0-9/]*/[1-9/]/[0-9/]*))$" //正浮点数 "^((-/d+(/./d+)?)/|(0+(/.0+)?))$" //非正浮点数(负浮点数 + 0) "^(-((/[0-9/]+/./[0-9/]*/[1-9/]/[0-9/]*)/|(/[0-9/]*/[1-9/]/[0-9/]*/./[0-9/]+)/|(/[0-9/]*/[1-9/]/[0-9/]*)))$" //负浮点数 "^(-?/d+)(/./d+)?$" //浮点数 "^/[A-Za-z/]+$" //由26个英文字母组成的字符串 "^/[A-Z/]+$" //由26个英文字母的大写组成的字符串 "^/[a-z/]+$" //由26个英文字母的小写组成的字符串 "^/[A-Za-z0-9/]+$" //由数字和26个英文字母组成的字符串 "^/w+$" //由数字、26个英文字母或者下划线组成的字符串 "^/[/w-/]+(/./[/w-/]+)*@/[/w-/]+(/./[/w-/]+)+$" //email地址 "^/[a-zA-z/]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$" //url /^(d{2}/|d{4})-((0(/[1-9/]{1}))/|(1/[1/|2/]))-((/[0-2/](/[1-9/]{1}))/|(3/[0/|1/]))$/ // 年-月-日 /^((0(/[1-9/]{1}))/|(1/[1/|2/]))/((/[0-2/](/[1-9/]{1}))/|(3/[0/|1/]))/(d{2}/|d{4})$/ // 月/日/年 "^(/[w-./]+)@((/[/[0-9/]{1,3}./[0-9/]{1,3}./[0-9/]{1,3}.)/|((/[w-/]+.)+))(/[a-zA-Z/]{2,4}/|/[0-9/]{1,3})(/]?)$" //Emil "(d+-)?(d{4}-?d{7}/|d{3}-?d{8}/|^d{7,8})(-d+)?" //电话号码 "^(d{1,2}/|1dd/|2/[0-4/]d/|25/[0-5/]).(d{1,2}/|1dd/|2/[0-4/]d/|25/[0-5/]).(d{1,2}/|1dd/|2/[0-4/]d/|25/[0-5/]).(d{1,2}/|1dd/|2/[0-4/]d/|25/[0-5/])$" //IP地址
匹配中文字符的正则表达式: /[/u4e00-/u9fa5/] 匹配双字节字符(包括汉字在内):/[^/x00-/xff/] 匹配空行的正则表达式:/n/[/s/| /]*/r 匹配HTML标记的正则表达式:/<(.*)>.*<///1>/|<(.*) //>/ 匹配首尾空格的正则表达式:(^/s*)/|(/s*$) 匹配Email地址的正则表达式:/w+(/[-+./]/w+)*@/w+(/[-./]/w+)*/./w+(/[-./]/w+)/* 匹配网址URL的正则表达式:^/[a-zA-z/]+://(//w+(-//w+)*)(//.(//w+(-//w+)*))*(//?//S*)?$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^/[a-zA-Z/]/[a-zA-Z0-9_/]{4,15}$ 匹配国内电话号码:(/d{3}-/|/d{4}-)?(/d{8}/|/d{7})? 匹配腾讯QQ号:^/[1-9/]*/[1-9/]/[0-9/]*$
--------------------------- 正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
匹配中文字符的正则表达式: [/u4e00-/u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^/x00-/xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:/n/s*/r 评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(/S*?)[^>]*>.*?<//1>|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^/s*|/s*$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)* 评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^/s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用
匹配国内电话号码:/d{3}-/d{8}|/d{4}-/d{7} 评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]/d{5}(?!/d) 评注:中国邮政编码为6位数字
匹配身份证:/d{15}|/d{18} 评注:中国的身份证为15位或18位
匹配ip地址:/d+/./d+/./d+/./d+ 评注:提取ip地址时有用
匹配特定数字: ^[1-9]/d*$ //匹配正整数 ^-[1-9]/d*$ //匹配负整数 ^-?[1-9]/d*$ //匹配整数 ^[1-9]/d*|0$ //匹配非负整数(正整数 + 0) ^-[1-9]/d*|0$ //匹配非正整数(负整数 + 0) ^[1-9]/d*/./d*|0/./d*[1-9]/d*$ //匹配正浮点数 ^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ //匹配负浮点数 ^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ //匹配浮点数 ^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ //匹配非负浮点数(正浮点数 + 0) ^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ //匹配非正浮点数(负浮点数 + 0)评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 ^/w+$ //匹配由数字、26个英文字母或者下划线组成的字符串评注:最基本也是最常用的一些表达式