元字符:
1.“.” 匹配任意单个字符;转义 \.;当放在字符集合中时,会当成普通字符
2.字符集合:[],字符集合的匹配结果是能够与该集合里的任一成员相匹配的文本
3.字符区间:-, 字符区间的首尾字符可以是ASCII字符表里的任意字符。-作为元字符只能用在字符集合里,在字符集合以外都作为普通字符,不需要转义。
4.取非匹配:^的效果是字符集合里的所有成员
5.匹配空白字符:
[\b]<=> backspace键
\f 换页符
\n换行符
\r 回车符
\t 制表符
\v 垂直制表符
6.匹配特定的字符类别:
\d 任何一个数字字符,等价于[0-9]
\D 任何一个非数字字符,等价于[^0-9]
\w 任何一个字母数字或下划线字符,等价于[a-zA-Z0-9_]
\W任何一个非字母数字或非下划线字符,等价于[^a-zA-Z0-9_]
\s 任何一个空白字符,等价于[\f\n\r\t\v]
\S任何一个非空白字符,等价于[^\f\n\r\t\v]
注:[\b]是个特例,不在\s范围内,属于\S
十六进制与八进制:例
\x0A<==> \n
\011<==>\t
POSIX字符类:
[:alnum:] 任何一个字母或数字,等价于[a-zA-Z0-9]
[:alpha:] 任何一个字母,等价于[a-zA-Z]
[:blank:] 空格或制表符,等价于[\t ],t后面加了一个空格
[:cntrl:] ASCII控制字符,ASCII 0-31,再加上127
[:digit:]任何一个数字,等价于[0-9]
[:graph:]和[:print:]一样,但不包括空格
[:print:]任何一个可打印字符
[:lower:]任何一个小写字母,等价于[a-z]
[:punct:]即不属于[:alnum:]也不属于[:cntrl:]的任何一个字符
[:space:]任何一个空白字符,包括空格,等价于[\f\n\r\t\v ],v后面加了一个空格
[:upper:]任何一个大写字母,等价于[A-Z]
[:xdigit:]任何一个十六进制数字,等价于[a-fA-F0-9]
7.重复匹配
匹配一个或多个字符:将+置于一个字符或字符集合之后,当给字符集合加+时,要把+放在[]外面,放在里面会被当成是普通字符。其转义为\+。
匹配0个或多个字符:*,与+的用法一样。
匹配0个或一个字符:?
匹配的重复次数:{num},指定一个字符或字符集合重复num次;也可指定一个区间{min,max}。还可指定最少重复多少次,不设上限{min,}。
防止过度匹配:在匹配文本时,*和+总是尽可能的从文本开头匹配到文本结尾,而不是在遇到第一个匹配时停下。可以用其懒惰版本防止。
*对应 *?
+对应+?
{n,}对应{n,}?
例:文本:1231234 正则表达式:[\d]{3,} 和[\d]{3,}?
8.位置匹配
单词边界:\b标识一个单词的开始和结束;\b匹配且只匹配一个位置,不匹配任何一个字符。 \B标识非单词的开始和结束。例: \B-\B 文本:- abc ad-de
字符串边界:^和$分别表示字符串的开头和结束
分行匹配模式:(?m)必须放在整个模式的前面,分行匹配模式,将每行的字符各当成一个字符串,即将行分割符当成字符串分割符。但不是每一个正则表达式都支持
9.使用子表达式
(),子表达式还可以嵌套
10.回溯引用
\num 表示引用第几个子表达式
有些正则表达式支持命名捕获;
在替换操作中的使用:搜索表达式:(exp1)...(exp2) 替换表达式: ...($1)...($2)...
$1表示引用搜索的结果。回溯引用可以跨模式使用。
11.大小写转换:
\l 把下一个字符转换为小写
\u 把下一个字符转换为大写
\U \E 把两者之间的全部转换为大写
\L \E 把两者之间的全部转换为小写
12.前后查找:有的正则表达式不支持
向前查找: ?=开头的子表达式,匹配但不消费
向后查找:?<=
负向前:?!
负向后:?<!
13.嵌入条件
回溯引用条件
前后查找条件引用