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

输出:

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值