正则表达式关键点汇总
扩展正则表达式
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符,而且有部分参数是不需要添加转义符使用的。 字符匹配
代码
说明
.
匹配任意单个字符
[ ]
匹配范围内的任意单个字符
[^ ]
匹配范围外的任意单个字符 字符串不匹配
否定顺序环视: (?!(unfavored|unwanted)) (?![a-z]*(unfavored|unwanted))[a-z]{,12} (?![a-z]*(unfavored|unwanted))
例如:
不匹配baidu: ^(?!baidu).*$ 匹配次数
代码
说明
*
匹配前面的字符任意次(0、1、或多次);
.*
任意长度的任意字符;
+
匹配前面的字符至少1次
?
匹配前面的字符0次或者1次,即前面的字符可有可无;
{m}
其前面的字符出现m次,m为非负整数;
{m,n}
其前面字符出现最少m次最多n次,{m,}最少m次,{o,n}最多n次 位置锚定
代码
说明
^
行首
$
行尾
<, b
词首
>,b
词尾 分组及引用
代码
说明
( )
分组
1,2,…
后向引用
注意:特殊用法 C|cat:表示C或cat ,表示整个左侧或整个右侧。 (C|c)at:表示Cat或cat 其他
列出几个扩展特殊符号:
代码
说明
于 . * 作用类似,表示 一个或多个重复字符。
?
于 . * 作用类似,表示0个或一个字符。
表示或关系,比如 "gd
()
将部分内容合成一个单元组(abc
比如 要搜索 glad 或 good 可以这样 "g(la
oo)d" ()的好处是可以对小组使用 + ? * 等。
比如要搜索A和C开头结尾,中间有至少一个(xyz) 的串,可以这样 : "A(xyz)+C" 正则表达式元字符元字符普通转义
代码
说明
.
匹配除换行符以外的任意字符
w
匹配字母或数字或下划线或汉字
s
匹配任意的空白符
d
匹配数字
b
匹配单词的开始或结束
^
匹配字符串的开始
$
匹配字符串的结束 特殊字符转移义
比如[,可以使用[,如果[不好使,可以试试[,这个在不同命令中不一样,awk -F "" 中必须是[ 重复次数
代码
说明
*
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复n到m次 反义
代码
说明
W
匹配任意不是字母,数字,下划线,汉字的字符
S
匹配任意不是空白符的字符
D
匹配任意非数字的字符
B
匹配不是单词开头或结束的位置
[^x]
匹配除了x以外的任意字符
[^aeiou]
匹配除了aeiou这几个字母以外的任意字符 其他
代码
说明
a
报警字符(打印它的效果是电脑嘀一声)
b
通常是单词分界位置,但如果在字符类里使用代表退格
制表符,Tab
r
回车
v
竖向制表符
f
换页符
换行符
e
Escape
nn
ASCII代码中八进制代码为nn的字符
xnn
ASCII代码中十六进制代码为nn的字符
unnnn
Unicode代码中十六进制代码为nnnn的字符
cN
ASCII控制字符。比如cC代表Ctrl+C
A
字符串开头(类似^,但不受处理多行选项的影响)
Z
字符串结尾或行尾(不受处理多行选项的影响)
z
字符串结尾(类似$,但不受处理多行选项的影响)
G
当前搜索的开头
p{name}
Unicode中命名为name的字符类,例如p{IsGreek}
(?>exp)
贪婪子表达式
(?-exp)
平衡组
(?im-nsx:exp)
在子表达式exp中改变处理选项
(?im-nsx)
为表达式后面的部分改变处理选项
(?(exp)yes|no)
把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes)
同上,只是使用空表达式作为no
(?(name)yes|no)
如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes)
同上,只是使用空表达式作为no (括号)、[中括号]、{大括号}的区别小结
正则表达式的() [] {}有不同的意思。
() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
(s*)表示连续空格的字符串。
[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[s*]表示空格或者 号。
{}一般用来表示匹配的长度,比如 s{3} 表示匹配三个空格,s[1,3]表示匹配一到三个空格。
(0-9) 匹配 "0-9′ 本身。 [0-9] 匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。
[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。
大括号{次数}可以用于小括号前,类似:(分组匹配){次数} 这种
例如:在PHP中过滤内容里面有数字或空格数字 preg_replace("/d{1,}s{0,1}/", "xxxxxxxx", $signaturecontent);