Regular Expression
常简写为regex、regexp或RE),计算机科学的一个概念。 通常被用来检索、替换那些符合某个模式(规则)的文本
元字符
.
匹配除"\r\n"之外的任何单个字符;要匹配包括"\r\n"在内的任何字符,请使用像"[\s\S]"的模式.x|y
匹配x或y;"z|food"能匹配"z"或"food";"[zf]ood"则匹配"zood"或"food".[xyz]
字符集合匹配所包含的任意一个字符;"[abc]"可以匹配"plain"中的"a".[^xyz]
负值字符集合匹配未包含的任意字符;"[^abc]"可以匹配"plain"中的"plin".[a-z]
字符范围匹配指定范围内的任意字符;"[a-z]"可以匹配"a"到"z"范围内的任意小写字母字符.
\perl Perl
预定义字符族\PERL
反向Perl预定义字符族Perl字符族
\d
== [0-9] 匹配一个数字字符\D
== [^0-9] 匹配一个非数字字符\s
== [\t\n\f\r\v] 匹配任何不可见字符(空格,制表符,换页符) (golang)\S
== [^\t\n\f\r\v] 匹配任何可见字符 (golang)\w
?== [0-9A-Za-z_] 匹配包括下划线的任何单词字符 (golang)\W
?== [^0-9A-Za-z_] 匹配任何非单词字符 (golang)
次数
*
匹配前面的子表达式任意次;zo*
能匹配"z",也能匹配"zo"以及"zoo"。*等价于o{0,}+
匹配前面的子表达式一次或多次(大于等于1次);"zo+"能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}?
匹配前面的子表达式零次或一次;"do(es)?"可以匹配"do"或"does"中的"do"。?等价于{0,1}{n}
n是一个非负整数。匹配确定的n次;"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o{n,}
n是一个非负整数。至少匹配n次;"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o "o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。{n,m}
m和n均为非负整数,其中n<=m最少匹配n次且最多匹配m次;"o{1,3}"将匹配"fooooood"中的前三个o为一组,后三个o为一组 "o{0,1}"等价于"o?"。在逗号和两个数之间不能有空格
模式
?
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的.
边界
^
匹配输入字符串的开始位置;如果设置了RegExp对象的Multiline属性,^也匹配"\n"或"\r"之后的位置。$
匹配输入字符串的结束位置;如果设置了RegExp对象的Multiline属性,$也匹配"\n"或"\r"之前的位置。\b
匹配一个单词边界,也就是指单词和空格间的位置;"er\b"可以匹配"never"中的"er",但不能匹配"verb"中的"er"。\B
匹配非单词边界;"er\B"能匹配"verb"中的"er",但不能匹配"never"中的"er"。
组
()
将( 和 ) 之间的表达式定义为”组”(group),并且将匹配这个表达式的字符保存到一个临时区域;(一个正则表达式中最多可以保存9个),它们可以用符号(\,$)加数字0-9来引用[golang中室友二维数组获取,其中二维切片的第一个(下标0)标识所有匹配从第二个(下标1)表示组]
Golang中使用
func Compile(expr string) (*Regexp, error)
Compile解析并返回一个正则表达式。如果成功返回,该Regexp就可用于匹配文本
func MustCompile(str string) *Regexp
MustCompile类似Compile但会在解析失败时panic,主要用于全局正则表达式变量的安全初始化
Find(All)?(String)?(Submatch)?(Index)?
'All'该方法会返回输入中所有互不重叠的匹配结果
'String'出现了,匹配对象为字符串,否则应该是[]byte类型,返回值和匹配对象的类型是对应的
'Submatch'出现了,返回值是表示正则表达式中成功的组匹配(子匹配/次级匹配)的切片func (re *Regexp) Match(b []byte) bool
Match检查b中是否存在匹配pattern的子序列
func (re *Regexp) MatchString(s string) bool
MatchString类似Match,但匹配对象是字符串
func (re *Regexp) FindAllString(s string, n int) []string
返回正则表达式re在s中的所有不重叠的匹配结果的[]string切片。
如果没有匹配到,会返回nil
N表示s [0,n) n<0表示整个s中查找func(re*Regexp) FindAllStringSubmatch(s string, n int) [][]string
返回正则表达式re在s中的所有不重叠的匹配结果及其对应的(可能有的)分组匹配的结果的[][]string切片
func (re *Regexp) Split(s string, n int) []string
Split将re在s中匹配到的结果作为分隔符将s分割成多个字符串,并返回这些正则匹配结果之间的字符串的切片
func (re *Regexp) ReplaceAllString(src, repl string) string
返回src的一个拷贝,将src中所有re的匹配结果都替换为repl。
在替换时,repl中的'$'符号会按照Expand方法的规则进行解释
和替换,例如$1会被替换为第一个分组匹配结果
Comments