技术宅

当前位置:首页 > 网站教程 > 代码学习

代码学习

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 接受的一些语法。
 
单字符表达的种类 例子
任何字符,可能包括换行符 (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 xy(更喜欢x
 
重复
x* 零或更多x,更喜欢更多
x+ 一个或多个x,优选更多
x? 零个或一个x,最好一个
x{n,m} nn+1 或 ... 或m x,更喜欢
x{n,} n或更多x,更喜欢更多
x{n} 确切地n x
x*? 零个或更多x,优先选择较少
x+? 一个或多个x,优选较少
x?? 零或一x,最好是零
x{n,m}? nn+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)
$ 位于文本末尾(如\znot \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 不是\dVIM
\x 十六进制数字 (≡ [0-9A-Fa-f])(不支持)VIM
\X \x支持(不支持)VIM
\o 八进制数字 (≡ [0-7])(不支持)VIM
\O \o支持(不支持)VIM
\w 单词字符 VIM
\W 不是\wVIM
\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