go原生正则库支持的和不支持的
时间:05-30
作者:
正则表达式是一种描述字符串集合的符号。当某个字符串位于正则表达式描述的集合中时,我们通常说该正则表达式 与 该字符串 匹配。
最简单的正则表达式是单个文字字符。除了
最简单的正则表达式是单个文字字符。除了
正则表达式是一种描述字符串集合的符号。当某个字符串位于正则表达式描述的集合中时,我们通常说该正则表达式 与 该字符串 匹配。
最简单的正则表达式是单个文字字符。除了像 这样的元字符外 *+?()|,字符都匹配自身。要匹配元字符,请使用反斜杠将其转义: \+ 匹配文字加号字符。
两个正则表达式可以交替使用或连接起来形成一个新的正则表达式:如果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 接受的语法的子集,并且有各种 注意事项。
它还列出了 PCRE、PERL 和 VIM 接受的一些语法。
内容转自 https://github.com/google/re2/wiki/Syntax
最简单的正则表达式是单个文字字符。除了像 这样的元字符外 *+?()|,字符都匹配自身。要匹配元字符,请使用反斜杠将其转义: \+ 匹配文字加号字符。
两个正则表达式可以交替使用或连接起来形成一个新的正则表达式:如果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 接受的语法的子集,并且有各种 注意事项。
它还列出了 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 |
实施限制:计数形式x{n,m}
、x{n,}
和x{n}
拒绝形式创建的最小或最大重复次数超过 1000。无限次重复不受此限制。
所有格重复 | |
---|---|
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 (不支持)VIM |
\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:]] |
在字符类中命名 ASCII 类 (≡ [:name:] ) |
[^[:name:]] |
否定字符类内的命名 ASCII 类 (≡ [:^name:] ) |
[\p{Name}] |
字符类内的命名 Unicode 属性 (≡ \p{Name} ) |
[^\p{Name}] |
否定字符类中的命名 Unicode 属性 (≡ \P{Name} ) |
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 |
Cypro_Minoan |
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 |
Kawi |
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 |
Nag_Mundari |
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 |
Old_Uyghur |
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 |
Tangsa |
Tangut |
Telugu |
Thaana |
Thai |
Tibetan |
Tifinagh |
Tirhuta |
Toto |
Ugaritic |
Vai |
Vithkuqi |
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 |
magic(不支持)VIM |
\M |
nomagic(不支持)VIM |
\v |
verymagic(不支持)VIM |
\V |
verynomagic(不支持)VIM |
\Z |
忽略 Unicode 组合字符的差异(不支持)VIM |
魔法 | |
---|---|
(?{code}) |
任意 Perl 代码(不支持)PERL |
(??{code}) |
推迟任意 Perl 代码(不支持)PERL |
(?n) |
对正则表达式捕获组的递归调用n (不支持) |
(?+n) |
对相关组的递归调用+n (不支持) |
(?-n) |
对相关组的递归调用-n (不支持) |
(?C) |
PCRE 调用(不支持)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 |
内容转自 https://github.com/google/re2/wiki/Syntax