正则表达式的模式可以包括以下内容:
.
、星号 *
、加号 +
、问号 ?
等,它们具有特殊的含义和功能。[ ]
包围的字符集合,用于匹配方括号内的任意一个字符。\d
、\w
、\s
等,用于匹配特定类型的字符,如数字、字母、空白字符等。{n}
、{n,}
、{n,m}
等,用于指定匹配的次数或范围。^
、$
、\b
、\B
等,用于匹配字符串的开头、结尾或单词边界位置。[abc*.]
字符合集,匹配包含在合集abc*.
中的任意一个字符,合集中的字符*
和.
没有特殊功能,就是符号本身[a-z]
匹配所有小写字母[A-Z]
匹配所有大写字母[0-9]
匹配所有数字,等同于\d
[^xyz]
负值字符集合。匹配未包含的任意字符。例如, [^abc]
可以匹配 plain
中的p
、l
、i
、n
x|y
匹配 x 或 y。例如,z|food
能匹配 z
或 food
;(z|f)ood
则匹配 zood
或 food
^
行首$
行尾\<
单次词首,无效?\<
单次词尾,无效?\b
匹配一个单词边界,也就是指单词和空格间的位置。例如, er\b
可以匹配never
中的 er
,但不能匹配 verb
中的 er
\B
匹配一个非单词边界,例如, er\b
不能匹配never
中的 er
,但可以匹配 verb
中的 er
(pattern)
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9
属性,要匹配圆括号字符,请使用 \(
或 \)
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|)
来组合一个模式的各个部分是很有用。例如, industr(?:y|ies)
就是一个比 industry|industries
更简略的表达式。(?=pattern)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,Windows(?=95|98|NT|2000)
能匹配Windows2000
中的Windows
,但不能匹配Windows3.1
中的Windows
。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。(?!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如Windows(?!95|98|NT|2000)
能匹配Windows3.1
中的Windows
,但不能匹配Windows2000
中的Windows
。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。(?<=pattern)
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,(?<=95|98|NT|2000)Windows
能匹配2000Windows
中的Windows
,但不能匹配`3.1Windows"中的"Windows"。(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。例如(?<!95|98|NT|2000)Windows
能匹配3.1Windows
中的Windows
,但不能匹配2000Windows
中的Windows
\cx
匹配由 x
指明的控制字符。例如, \cM
匹配一个 Control-M
或回车符。x
的值必须为 A-Z
或 a-z
之一。否则,将 c
视为一个原义的 c
字符。\d
匹配一个数字字符,等价于 [0-9]
\D
匹配一个非数字字符。等价于 [^0-9]
\f
匹配一个换页符。等价于 \x0c
和 \cL
\n
匹配一个换行符。等价于 \x0a
和 \cJ
\r
匹配一个回车符。等价于 \x0d
和 \cM
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
。\S
匹配任何非空白字符,等价于 [^ \f\n\r\t\v]
\t
匹配一个制表符,等价于 \x09
和 \cI
\v
匹配一个垂直制表符,等价于 \x0b
和 \cK
\w
匹配字母、数字、下划线,等价于[A-Za-z0-9_]
\W
匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_]
\xn
匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,\x41
匹配 A
;\x041
则等价于 \x04
& 1
,正则表达式中可以使用 ASCII 编码\num
匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,(.)\1
匹配两个连续的相同字符。\n
标识一个八进制转义值或一个向后引用。如果 \n
之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7)
,则 n 为一个八进制转义值。\nm
标识一个八进制转义值或一个向后引用。如果 \nm
之前至少有 nm
个获得子表达式,则 nm
为向后引用。如果 \nm
之前至少有 n
个获取,则 n
为一个后跟文字 m
的向后引用。如果前面的条件都不满足,若 n
和 m
均为八进制数字 (0-7)
,则 \nm
将匹配八进制转义值 nm
。\nml
如果 n
为八进制数字 (0-3)
,且 m
和 l
均为八进制数字 (0-7)
,则匹配八进制转义值 nml
\un
匹配 n
,其中 n
是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9
匹配版权符号 ©
*
匹配前面的子表达式零次或多次。例如,zo*
能匹配 z
以及 zoo
。*
等价于{0,}
+
匹配前面的子表达式一次或多次。例如,zo+
能匹配 zo
以及 zoo
,但不能匹配 z
,+
等价于 {1,}
?
匹配前面的子表达式零次或一次。例如,do(es)?
可以匹配 do
或 does
,?
等价于 {0,1}
,也叫非贪婪匹配{n}
匹配前面的表达式n次{n,}
匹配前面的表达式至少n次{n,m}
匹配前面的表达式n到m次\*
匹配*
字符\.
匹配.
字符\/
匹配/
字符\\
匹配\
字符\[
匹配[
字符\]
匹配]
字符区别:捕获表达式不是用(
和)
,而是用\(
和\)
使用格式,[]
中的内容是可选内容,可以忽略
:[range]s/from/to/[flags]
:v/pattern/d
删除无pattern行:g/pattern/d
删除有pattern行range 搜索范围,如果没有指定范围,则作用于当前行
:1,10s/from/to/
表示在第1到第10行(包含第1,第10行)之间搜索替换;:10s/from/to/
表示只在第10行搜索替换;:%s/from/to/
表示在所有行中搜索替换;:1,$s/from/to/
同上。flags 这些选项可以合并使用,如cgi表示不区分大小写,整行替换,替换前询问。
c
confirm,每次替换前询问e
error,不显示错误g
global,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串i
igonor,忽略大小写m
multi line ,多行匹配,使边界字符 ^
和 $
匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。s
特殊字符圆点 . 中包含换行符 \n
,默认情况下的圆点 . 是匹配除换行符 \n
之外的任何字符,加上 s
修饰符之后, . 中包含换行符 \n
。