正则表达式:Regular Expression

     Java处理正则表达式的类所在包为java.util.regexp,其中Pattern为封装正则表达式的模式(Pattern=Pattern.compile(String regex)),Matcher为处理字符串的匹配器(Matcher=Pattern.matcher(String input)),MatchResult为正则匹配的一个结果(Matcher.find(); MatchResult=Matcher.toMatchResult()),通常使用Matcher.find|group就可以遍查输入串了。

 

     正则表达式的语义成分包括:

1,转义字符,如\\反斜杠、\r\n\t\f回车换行等、\0nnn八进制数、\xff十六进制数、\uhhhhUnicode字符;

2,字符集,如[abc]、[^abc]非abc、[a-zA-Z0-9]大小写英文字母及数字、[a-z&&[^g-k]]除g到k之外的小写字母,\d\s\w数字空白字母,\D\S\W非数字非空白非字母(这里的反斜杠需要转义为\\才能编译),有些POSIX字符集可能有用,\p{ASCII}、\p{Punct}标点、\p{Cntrl}控制符、\p{XDigit}十六进制字符,特殊集合,[\u4e00-\u9fa5]中文字符、^[1-9]\d{5}$邮政编码等;

3,逻辑词及边界匹配,如XY顺序、X|Y或、(X)分组、(?:X)分组但不占用分组编号、\n之前匹配的分组(如(ab)c+\1表示首尾都是ab,中间全是c的串模式)、$i已匹配的分组对应值(如查找(ab)(c+)(de)替换为$3$2$1表示前后调换ab和de),^起始(^(ab)以ab开头的句子)、$结束($(ab)以ab结尾的句子)、\b单词匹配。

4,贪婪及匹配次数,*0次以上、?0或1次、+1次以上、{n}n次、{n,}n次以上、{n,m}n至m次,?勉强匹配(如abc*?匹配abccd时只得ab),+贪婪匹配(如abc*+匹配abccd则得abcc)。

 

     常用正则表达式:

1,网址:URL=protocol://hostname[:port]/path/[;parameters][?query][#fragment],这个模式串表现不错:(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]

2,邮箱:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

 

     使用编辑器的正则表达式处理文本:

1,去掉空行,替换^([\s&&[^\n\r]]*)$(\r\n) 或\n[\s| ]*\r为空;

2,去掉首尾空格,替换([\s&&[^\r\n]]*)(.*?)([\s&&[^\r\n]]*)$(\r\n)为$2$4;使用分组及\n$i可方便地交换匹配串。

3,去掉多余的TODO,替换// TODO.*$(\r\n)([\s&&[^\r\n]]*)为空;

posted @ 2011-05-20 15:17 xlongwei 阅读(...) 评论(...) 编辑 收藏
xlongwei