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