正则表达式是描述字符串集的一种表示法。当特定字符串位于正则表达式描述的集合中时,我们通常会说正则表达式 与 字符串匹配。
最简单的正则表达式是单个文字字符。除元字符(如)外 *+?()|
,字符会相互匹配。要匹配元字符,请使用反斜杠将其转义: \+
匹配文字加号。
两个正则表达式可以交替使用或连接起来以形成新的正则表达式:如果e 1匹配 s 并且e 2匹配 t,则e 1 |
e 2匹配 s 或 t, e 1 e 2 匹配 st。
元字符 *
, +
和 ?
是重复运算符: e 1*
匹配零个或多个(可能不同)字符串的序列,每个字符串都匹配e 1; e 1+
匹配一个或多个; e 1?
匹配零或一。
从最弱绑定到最强绑定,运算符优先级是首先交替,然后是串联,最后是重复运算符。就像在算术表达式中一样,可以使用显式括号来强制使用不同的含义。一些例子: ab|cd
相当于 (ab)|(cd)
; ab*
等价于 a(b*)
。
到目前为止描述的语法是大多数传统的Unix egrep 正则表达式语法。该子集足以描述所有常规语言:宽松地说,常规语言是一组字符串,可以仅使用固定数量的内存就可以在一次遍历文本中进行匹配。较新的正则表达式工具(特别是Perl及其复制者)增加了许多新的运算符和转义序列,这使正则表达式更简洁,有时更神秘,但通常不更强大。
本页列出了RE2接受的正则表达式语法。
它还列出了PCRE,PERL和VIM接受的一些语法。
各种单字符表达式 |
例子 |
任何字符,可能包括换行符(s = true) |
. |
人物类 |
[xyz] |
否定性格 |
[^xyz] |
Perl字符类(链接) |
\d |
否定的Perl角色类 |
\D |
ASCII字符类(链接) |
[[:alpha:]] |
取反的ASCII字符类 |
[[:^alpha:]] |
Unicode字符类(一个字母的名称) |
\pN |
Unicode字符类 |
\p{Greek} |
取反的Unicode字符类(一个字母的名称) |
\PN |
取反的Unicode字符类 |
\P{Greek} |
|
复合材料 |
xy |
x 其次是 y |
x|y |
x 或y (首选x ) |
|
重复次数 |
x* |
零或更多x ,更喜欢 |
x+ |
一个或多个x ,更喜欢 |
x? |
零或一x ,喜欢一个 |
x{n,m} |
n 或n +1或…或m x ,更喜欢 |
x{n,} |
n 或更多x ,更喜欢 |
x{n} |
究竟 n x |
x*? |
零或更多x ,更喜欢更少 |
x+? |
一个或多个x ,更喜欢较少 |
x?? |
零或一x ,更喜欢零 |
x{n,m}? |
n 或n +1或…或m x ,更喜欢 |
x{n,}? |
n 或更多x ,偏爱更少 |
x{n}? |
究竟 n x |
x{} |
(≡ x* )(不支持)VIM |
x{-} |
(≡ x*? )(不支持)VIM |
x{-n} |
(≡ x{n}? )(不支持)VIM |
x= |
(≡ x? )(不支持)VIM |
实施限制:创建最小或最大重复次数超过1000的计数表格x{n,m}
,x{n,}
和x{n}
拒绝表格。无限制的重复不受此限制。
|
所有格重复 |
x*+ |
零个或多个x ,所有格(不支持) |
x++ |
一个或多个x ,所有格(不支持) |
x?+ |
零或一x ,所有格(不支持) |
x{n,m}+ |
n 或…或m x ,所有格(不支持) |
x{n,}+ |
n 或以上x ,所有格(不支持) |
x{n}+ |
完全n x ,所有格(不支持) |
|
分组 |
(re) |
编号捕获组(子匹配项) |
(?P<name>re) |
命名和编号捕获组(子匹配) |
(?<name>re) |
命名和编号捕获组(子匹配项)(不支持) |
(?'name're) |
命名和编号捕获组(子匹配项)(不支持) |
(?:re) |
非捕获组 |
(?flags) |
在当前组内设置标志;非捕获 |
(?flags:re) |
在重新设置标志 非捕获 |
(?#text) |
评论(不支持) |
(?|x|y|z) |
分支编号重设(不支持) |
(?>re) |
所有格匹配re (不支持) |
re@> |
re (不支持)VIM的所有格匹配 |
%(re) |
非捕获组(不支持)VIM |
|
标志 |
i |
不区分大小写(默认为false) |
m |
多行模式:^ 和$ 匹配开始/结束线除了开始/结束文本(默认为false) |
s |
让. 比赛\n (默认为false) |
U |
ungreedy:掉期的意义x* 和x*? ,x+ 和x+? 等(默认为false) |
标志语法为xyz
(set)或-xyz
(clear)或xy-z
(set xy
,clear z
)。
|
空字符串 |
^ |
在文字或行首(m = true) |
$ |
在文本(如\z not \Z )或行(m = true)的末尾 |
\A |
文字开头 |
\b |
在ASCII字边界(\w 在一侧上和\W ,\A 或\z 在其他) |
\B |
不在ASCII字边界 |
\g |
在搜索子文本的开头(不支持)PCRE |
\G |
在最后一场比赛的末尾(不支持)PERL |
\Z |
在文本结尾处,或在文本结尾处的换行符之前(不支持) |
\z |
文字结尾 |
(?=re) |
文本匹配之前re (不支持) |
(?!re) |
文字不匹配之前re (不支持) |
(?<=re) |
文本匹配后re (不支持) |
(?<!re) |
文字不匹配之后re (不支持) |
re& |
文本匹配之前re (不支持)VIM |
re@= |
文本匹配之前re (不支持)VIM |
re@! |
文本不匹配之前re (不支持)VIM |
re@<= |
文本匹配后re (不支持)VIM |
re@<! |
文本不匹配re (不支持)之后 |
\zs |
设置比赛开始(= \ K)(不支持)VIM |
\ze |
设置比赛结束(不支持)VIM |
\%^ |
文件开头(不支持)VIM |
\%$ |
文件结尾(不支持)VIM |
\%V |
在屏幕上(不支持)VIM |
\%# |
光标位置(不支持)VIM |
\%'m |
标记m 位置(不支持)VIM |
\%23l |
在第23行(不支持)VIM |
\%23c |
在第23列(不支持)中的VIM |
\%23v |
在虚拟列23(不支持)VIM中 |
|
转义序列 |
\a |
钟(≡ \007 ) |
\f |
换页(≡ \014 ) |
\t |
水平制表符(≡ \011 ) |
\n |
换行符(≡ \012 ) |
\r |
回车(≡ \015 ) |
\v |
垂直制表符(≡ \013 ) |
\* |
文字* ,用于任何标点符号* |
\123 |
八进制字符代码(最多三位数) |
\x7F |
十六进制字符代码(恰好两位数) |
\x{10FFFF} |
十六进制字符代码 |
\C |
即使在UTF-8模式下也匹配单个字节 |
\Q...\E |
文字文本,... 即使... 有标点符号 |
\1 |
向后引用(不支持) |
\b |
退格键(不支持)(使用\010 ) |
\cK |
控制字符^ K(不支持)(使用\001 等) |
\e |
转义(不支持)(使用\033 ) |
\g1 |
向后引用(不支持) |
\g{1} |
向后引用(不支持) |
\g{+1} |
向后引用(不支持) |
\g{-1} |
向后引用(不支持) |
\g{name} |
命名反向引用(不支持) |
\g<name> |
子例程调用(不支持) |
\g'name' |
子例程调用(不支持) |
\k<name> |
命名反向引用(不支持) |
\k'name' |
命名反向引用(不支持) |
\lX |
小写X (不支持) |
\ux |
大写x (不支持) |
\L...\E |
小写文字... (不支持) |
\K |
重置$0 (不支持)的开始 |
\N{name} |
命名的Unicode字符(不支持) |
\R |
换行符(不支持) |
\U...\E |
大写文本... (不支持) |
\X |
扩展Unicode序列(不支持) |
\%d123 |
小数点123(不支持)VIM |
\%xFF |
十六进制字符FF(不支持)VIM |
\%o123 |
八进制字符123(不支持)VIM |
\%u1234 |
Unicode字符0x1234(不支持)VIM |
\%U12345678 |
Unicode字符0x12345678(不支持)VIM |
|
角色类元素 |
x |
单字符 |
A-Z |
字符范围(含) |
\d |
Perl角色类 |
[:foo:] |
ASCII字符类 foo |
\p{Foo} |
Unicode字符类 Foo |
\pF |
Unicode字符类F (一个字母的名称) |
|
将角色类命名为角色类元素 |
[\d] |
位数(≡ \d ) |
[^\d] |
不是数字(≡ \D ) |
[\D] |
不是数字(≡ \D ) |
[^\D] |
不是数字(≡ \d ) |
[[:name:]] |
字符类(≡ [:name:] )中已命名的ASCII类 |
[^[:name:]] |
否定字符类(≡ [:^name:] )内的命名ASCII类 |
[\p{Name}] |
字符类(≡ \p{Name} )中已命名的Unicode属性 |
[^\p{Name}] |
否定字符类(≡ \P{Name} )中的已命名Unicode属性 |
|
Perl字符类(所有仅ASCII) |
\d |
位数(≡ [0-9] ) |
\D |
不是数字(≡ [^0-9] ) |
\s |
空格(≡ [\t\n\f\r ] ) |
\S |
不是空格(≡ [^\t\n\f\r ] ) |
\w |
字元(≡ [0-9A-Za-z_] ) |
\W |
不是文字字符(≡ [^0-9A-Za-z_] ) |
\h |
水平空间(不支持) |
\H |
不是水平空间(不支持) |
\v |
垂直空间(不支持) |
\V |
没有垂直空间(不支持) |
|
ASCII字符类 |
[[:alnum:]] |
字母数字(≡ [0-9A-Za-z] ) |
[[:alpha:]] |
字母(≡ [A-Za-z] ) |
[[:ascii:]] |
ASCII(≡ [\x00-\x7F] ) |
[[:blank:]] |
空白(≡ [\t ] ) |
[[:cntrl:]] |
控制(≡ [\x00-\x1F\x7F] ) |
[[:digit:]] |
位数(≡ [0-9] ) |
[[:graph:]] |
图形化([!-~] ≡ [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_ ` {|}~] ) |
[[:lower:]] |
小写字母(≡ [a-z] ) |
[[:print:]] |
可打印的([ -~] ≡ [ [:graph:]] ) |
[[:punct:]] |
标点符号(≡ [!-/:-@[- ` {-~] ) |
[[:space:]] |
空格(≡ [\t\n\v\f\r ] ) |
[[:upper:]] |
大写(≡ [A-Z] ) |
[[:word:]] |
字元(≡ [0-9A-Za-z_] ) |
[[:xdigit:]] |
十六进制数字(≡ [0-9A-Fa-f] ) |
|
Unicode字符类名称-常规类别 |
C |
其他 |
Cc |
控制 |
Cf |
格式 |
Cn |
未分配的代码点(不支持) |
Co |
私人使用 |
Cs |
替代 |
L |
信件 |
LC |
大小写字母(不支持) |
L& |
大小写字母(不支持) |
Ll |
小写字母 |
Lm |
修饰语 |
Lo |
其他字母 |
Lt |
标题字母 |
Lu |
大写字母 |
M |
标记 |
Mc |
间距标记 |
Me |
封闭标记 |
Mn |
非间距标记 |
N |
数 |
Nd |
十进制数 |
Nl |
字母编号 |
No |
其他号码 |
P |
标点 |
Pc |
连接器标点 |
Pd |
破折号标点 |
Pe |
标点符号 |
Pf |
最后标点 |
Pi |
初始标点 |
Po |
其他标点符号 |
Ps |
开放标点 |
S |
符号 |
Sc |
货币符号 |
Sk |
修饰符 |
Sm |
数学符号 |
So |
其他符号 |
Z |
分隔器 |
Zl |
行分隔符 |
Zp |
段落分隔符 |
Zs |
空格分隔符 |
Unicode字符类名称-脚本 |
Adlam |
Ahom |
Anatolian_Hieroglyphs |
Arabic |
Armenian |
Avestan |
Balinese |
Bamum |
Bassa_Vah |
Batak |
Bengali |
Bhaiksuki |
Bopomofo |
Brahmi |
Braille |
Buginese |
Buhid |
Canadian_Aboriginal |
Carian |
Caucasian_Albanian |
Chakma |
Cham |
Cherokee |
Chorasmian |
Common |
Coptic |
Cuneiform |
Cypriot |
Cyrillic |
Deseret |
Devanagari |
Dives_Akuru |
Dogra |
Duployan |
Egyptian_Hieroglyphs |
Elbasan |
Elymaic |
Ethiopic |
Georgian |
Glagolitic |
Gothic |
Grantha |
Greek |
Gujarati |
Gunjala_Gondi |
Gurmukhi |
Han |
Hangul |
Hanifi_Rohingya |
Hanunoo |
Hatran |
Hebrew |
Hiragana |
Imperial_Aramaic |
Inherited |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
Javanese |
Kaithi |
Kannada |
Katakana |
Kayah_Li |
Kharoshthi |
Khitan_Small_Script |
Khmer |
Khojki |
Khudawadi |
Lao |
Latin |
Lepcha |
Limbu |
Linear_A |
Linear_B |
Lisu |
Lycian |
Lydian |
Mahajani |
Makasar |
Malayalam |
Mandaic |
Manichaean |
Marchen |
Masaram_Gondi |
Medefaidrin |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
Miao |
Modi |
Mongolian |
Mro |
Multani |
Myanmar |
Nabataean |
Nandinagari |
New_Tai_Lue |
Newa |
Nko |
Nushu |
Nyiakeng_Puachue_Hmong |
Ogham |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
Oriya |
Osage |
Osmanya |
Pahawh_Hmong |
Palmyrene |
Pau_Cin_Hau |
Phags_Pa |
Phoenician |
Psalter_Pahlavi |
Rejang |
Runic |
Samaritan |
Saurashtra |
Sharada |
Shavian |
Siddham |
SignWriting |
Sinhala |
Sogdian |
Sora_Sompeng |
Soyombo |
Sundanese |
Syloti_Nagri |
Syriac |
Tagalog |
Tagbanwa |
Tai_Le |
Tai_Tham |
Tai_Viet |
Takri |
Tamil |
Tangut |
Telugu |
Thaana |
Thai |
Tibetan |
Tifinagh |
Tirhuta |
Ugaritic |
Vai |
Wancho |
Warang_Citi |
Yezidi |
Yi |
Zanabazar_Square |
|
Vim角色类 |
\i |
标识符字符(不支持)VIM |
\I |
\i VIM除外(不支持) |
\k |
关键字字符(不支持)VIM |
\K |
\k VIM除外(不支持) |
\f |
文件名字符(不支持)VIM |
\F |
\f VIM除外(不支持) |
\p |
可打印字符(不支持)VIM |
\P |
\p VIM除外(不支持) |
\s |
[ \t] VIM空白字符(≡ )(不支持) |
\S |
非空格字符(≡ [^ \t] )(不支持)VIM |
\d |
位数(≡ [0-9] )VIM |
\D |
不是\d VIM |
\x |
十六进制数字(≡ [0-9A-Fa-f] )(不支持)VIM |
\X |
不\x (不支持)VIM |
\o |
八位数字(≡ [0-7] )(不支持)VIM |
\O |
不\o (不支持)VIM |
\w |
文字字符VIM |
\W |
不是\w VIM |
\h |
VIM字头(不支持) |
\H |
不\h (不支持)VIM |
\a |
字母(不支持)VIM |
\A |
不\a (不支持)VIM |
\l |
小写(不支持)VIM |
\L |
不小写(不支持)VIM |
\u |
大写(不支持)VIM |
\U |
不大写(不支持)VIM |
\_x |
\x 加换行符,用于任何x (不支持)VIM |
\c |
忽略大小写(不支持)VIM |
\C |
火柴盒(不支持)VIM |
\m |
魔术(不支持)VIM |
\M |
nomagic(不支持)VIM |
\v |
非常神奇(不支持)VIM |
\V |
VIM(不支持)VIM |
\Z |
忽略Unicode组合字符中的差异(不支持)VIM |
|
魔法 |
(?{code}) |
任意Perl代码(不支持)PERL |
(??{code}) |
推迟任意Perl代码(不支持)PERL |
(?n) |
对正则表达式捕获组的递归调用n (不支持) |
(?+n) |
对相关组的递归调用+n (不支持) |
(?-n) |
对相关组的递归调用-n (不支持) |
(?C) |
PCRE标注(不支持) |
(?R) |
递归调用整个正则表达式(≡ (?0) )(不支持) |
(?&name) |
递归调用命名组(不支持) |
(?P=name) |
命名反向引用(不支持) |
(?P>name) |
递归调用命名组(不支持) |
(?(cond)true|false) |
条件分支(不支持) |
(?(cond)true) |
条件分支(不支持) |
(*ACCEPT) |
使正则表达式更像Prolog(不支持) |
(*COMMIT) |
(不支持) |
(*F) |
(不支持) |
(*FAIL) |
(不支持) |
(*MARK) |
(不支持) |
(*PRUNE) |
(不支持) |
(*SKIP) |
(不支持) |
(*THEN) |
(不支持) |
(*ANY) |
设置换行约定(不支持) |
(*ANYCRLF) |
(不支持) |
(*CR) |
(不支持) |
(*CRLF) |
(不支持) |
(*LF) |
(不支持) |
(*BSR_ANYCRLF) |
设置\ R约定(不支持)PCRE |
(*BSR_UNICODE) |
(不支持)PCRE |