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)
}
输出:
![]()
本文详细介绍了Go语言中正则表达式的使用方法,包括各种元字符、字符集、量词、边界断言等基本元素,以及如何利用Go语言的regexp包进行正则表达式的编译和匹配。
2968

被折叠的 条评论
为什么被折叠?



