正则表达式:
正则表达式是一种查找以及字符串替换操作
基础语法;
字符:
匹配自身 比如cat匹配ca t
元字符:
.表示匹配任意一个字符c.t匹配c然后任意字符然后匹配t;
\转义字符,可以忽略元字符c\.t表示匹配c然后.然后t
字符类:
用[],匹配[]中间任意一个:[cat]匹配c或者a或者t;
重复不起作用[aab]还是匹配a或者b;
[b-f]表示匹配b-f范围内任意一个字母;
^表示反义,[^ab]匹配非ab的;
[.]匹配任意一个全角句号
转义字符:
\d匹配0-9任意一个数字;\w匹配[0-9A-Za-z]任意一个字母或数字;\s匹配任意空值(空格制表回车换行等);
\D匹配任意一个非数字\W匹配任意一个非数字非字母的\S匹配任意一个非空值
重复:
{}表示重复: a{3}表示匹配aaa; a{1,3}表示匹配aaa或aa或a,这样的表示出循环范围的会优先匹配最长的;
?:循环0次或1次同{0,1};
*表示循环大于0次,与{0,}同,.*表示匹配任意内容
+表示循环1次及以上,同{1,} \w+表示匹配一个单词
注:加?时可以实现非贪婪匹配:a{1,3}?表示匹配a或aa或aaa
选择匹配:
用|
cat|dog表示匹配cat或者dog; a|b|匹配a或b或空;a|b|c同[abc]
[cat|dog]表示匹配a或c或d或g或o或t或|
分组:
用() (Septem|Octo)ber表示匹配Septemer或者October
单词分隔符:
\b分隔单词 \b\w\w\w\b表示匹配一个三字母单词
^表示匹配行开始位置 $表示匹配行结束位置 ^$表示匹配一个空行
\A \z表示文本的开始和结束符号
捕获和替换
(\w+)had a ((\w+)\w+) 共有三个捕获组,从左到右编号123(按照左括号个数)
I had a nice day 1:I 2:nice day 3:nice
替换时,捕获组内容和捕获组编号之间用-连接
(\d\d)/(\d\d)/(\d\d)匹配mm/dd/yy格式的日期;替换成yyyy-mm-dd格式则 20\3-\1\2:如 04/05/13会替换成2013-04-05
反向引用:
在正则表达式中用到捕获组就是反向引用;{[abc]}\1表示只匹配aa或者bb或者cc;
使用正则表达式编程:
java语言没有特殊标出正则表达式,所以要注意\的使用;比如String re = “\\d” 表示匹配任意一个数字;而有些语言是标识出正则表达式的,比如JS中用/ /\d/表示匹配一个数字;
注意事项:
一般不要在循环体中使用正则表达式因为效率很低;
一般不要用正则表达式匹配邮箱,最有效的方式是发送验证邮件;
一般不要用正则表达式匹配姓名,因为情况很复杂;
一般不要用正则表达式来解析HTML或者XML,有其他更好方式