Go语言中的正则表达式

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)
}

输出:

猜你喜欢

转载自blog.csdn.net/random_w/article/details/84977014