正则表达式

常用正则表达式

表达式 描述
. 匹配出换行符外任意字符
\ 转义符,可以将一些有特殊含义的字符转化为本身含义,如\.代表点本身的含义。
[ ] 匹配中括号中字符的一个,如[abc]表示匹配a、b、c中的一个字符。
| 匹配两个字符中的一个,如a|b表示匹配a或者b。
[0-9A-Za-z] 字符区间,[0-9]表示0-9中的一个数。
^ 取非匹配,[^0-9]表示不是0-9中的一个字符。
\d 匹配数字
\D 匹配非数字
\w 匹配字母
\W 匹配非字母
+ 匹配一个或多个字符,如\d+表示匹配一个或多个数字。
* 匹配0个或多个字符。
匹配0个或一个字符。
{n} 匹配多次,如\w{3}表示匹配3个字母。
{m,n} 匹配次数是一个区间,如\d{2,4}表示匹配2-4个数字。
{n,} 匹配至少次数的字符。
() 标记一个子表达式开始和结束
^ 放在外面表示匹配字符串开始位置,如果是在方括号内表示取非
$ 匹配字符串结束位置
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S 匹配任何非空白字符,等价于[ ^\f\n\r\t\v]
\t 匹配一个制表符
\v 匹配一个垂直制表符
\b 匹配一个单词边界,即字与空格间位置
\B 匹配一个非单词边界
?= 向前匹配,如?=:表示匹配:然后向前匹配,最后结果不包含:
?<= 向前匹配,如(?<=\$)[0-9.]+表示匹配$然后向后匹配,最后结果不包含$

防止过度匹配

  * 和+ 都是所谓的“贪婪型”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的。它们会尽可能地从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止。
  为了防止这种贪婪型匹配,我们需要使用对应字符的惰性版本,* 使用 *?,+ 使用 +?,{n,}使用{n,}?

回溯引用

  回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。如 <hH>.*?</[hH]\1>,这其中最后的\1表示前面第一个子表达式匹配的结果,即([1-6]),依此类推,\2表示第二个子表达式,\n表示第n个子表达式。
  回溯引用在替换操作中也很有用,如(\d{3})(-)(\d{3})(-)(\d{4})这个正则表达式,使用替换的表达式($1) $3-$5,可以将匹配到的字符替换成别的格式。其中$1,$3,$5分别表示第1,第3,第5个子表达式。