Go语言通过regexp标准包为正则表达式提供官方支持
语法 | 说明 | 表达式实例 |
一般字符 | 匹配自身 | abc 匹配abc |
. | 匹配任意除换行符“\n”外的字符 | a.b |
\ | 转义字符 | a\.b 匹配a.b |
[...] | 字符集(字符类),对应的位置可以是字符集中任意字符,也可以给出范围,如[abc]或[a-c],第一个字符为^则表示匹配除括号外其他的字符,所有特殊字符再字符集中都失去原有的特殊意义,在字符集中如果要用到]、-或^,则可以在前面加上反斜杠,或者把]、-放在第一个字符,把^放在非第一个字符。 | a[bcd]e 匹配:abe ace ade |
\d | 数字:[0-9] | a\db 可以匹配a1b |
\D | 非数字[^\d] | a\Db 可以匹配abb |
\s | 空白字符:[<空格>\t\r\n\f\v] | a\sb 可以匹配a b |
\S | 非空白符:[^\s] | a\Sb 可以匹配abb |
\w | 单词字符:[A-Za-z0-9_] | a\wc 可以匹配abc |
\W | 非单词字符:[^\w] | a\Wc 可以匹配a c |
* | 匹配前一个字符0次或无限次 | abc* 可以匹配ab abccc |
+ | 前一个字符出现一次或者无限次 | ab+ 可以匹配ab abbbb |
? | 匹配前一个字符一次或0次 | abc? 可以匹配ab abc |
{m} | 匹配前一个字符m次 | a{2} 可以匹配aa |
{m,n} | m和n可以省略,如果省略m,则匹配前一个字符0到n次,如果省略n,则匹配前一个字符m至无限次 | a[1,2]c 可以匹配ac aac |
\A | 匹配字符串开头 | \Aabc 可以匹配字符串abc |
\Z | 匹配字符串末尾 | abc\Z 可以匹配字符串abc |
\b | 匹配\w和\W之间 | a\b!bc 可以匹配a!bc |
\B | [^\b] | a\Bbc 可以匹配abc |
| | |代表左右表达式任意匹配一个,它总是先尝试匹配左边的表达式,一旦成功匹配则跳过匹配右侧的正则表达式。如果|没有被包括在()中,则他的范围是整个正则表达式 | abc|efg 可以匹配abc或efg |
(...) | 被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的左括号是“(”,编号+1。分组表达式作为一个整体后面可以接数量名词,表达式中的|只在该组中生效。 | (abc){2} 可以匹配abcabc a(123|456)b 可以匹配a456b |
(?P<name>...) | 分组除了原有的编号外再指定一个额外的别名 | (?P<id>abc){2} 匹配abcabc |
\<number> | 引号编号为<number>的分组匹配到的字符串 | (\d)abc\1 可以匹配1abc1 |
(?P=name) | 引用别名为<name>的分组匹配到的字符串 | (?P<id>\d)abc(?P=id) 可以匹配1abc1 |
(?:...) | (...)的不同版本,用于使用‘|’或后接数量词 | (?:abc){2} 匹配abcabc |
^ | 匹配字符串开头,再多行模式中匹配每一行的开头 | ^abc 匹配abc
|
$ | 匹配字符串结尾,再多行模式中匹配每一行的结尾 | abc$ 匹配abc |
package main
import (
"fmt"
"regexp"
)
func main() {
buf := "abc azc a7c a8c tac"
//1)解释规则,他会解析正则表达式,如果成功返回解释器
reg1 := regexp.MustCompile(`a.c`)
if reg1 == nil { //解释失败,返回nil
fmt.Println("err = ")
return
}
//2)根据规则提取关键信息,-1表示匹配所有项,正数为匹配项数
result := reg1.FindAllStringSubmatch(buf, -1)
fmt.Println("result = ", result)
}
输出: