go 正则

本文介绍了Go语言中正则表达式的使用,包括match、find和replace等功能,并提供了相关示例链接。在Go中,正则表达式用于匹配、查找和替换字符串,同时也可用作分隔符。需要注意的是,为了防止字符转义,通常使用反引号来定义正则表达式。

概述

一些例子
https://www.cnblogs.com/golove/p/3269099.html
https://golang.org/src/regexp/example_test.go

一般正则有三块功能

  • match
  • find(find all, find sub-match 两个维度)
findfind all
find sub-matchfind all sub-match
  • replace (sub-match 的引用 )
    go 的正则表达式替换括号匹配的内容的符号是 $$1开始, $0 是整个匹配的字符串

go 中,正则还有个小的作用——分隔符

func ExampleRegexp_Split() {
	a := regexp.MustCompile(`a`)
	fmt.Println(a.Split("banana", -1))// [b n n ]
	fmt.Println(a.Split("banana", 0)) // []
	fmt.Println(a.Split("banana", 1)) // [banana]
	fmt.Println(a.Split("banana", 2)) // [b nana]
	zp := regexp.MustCompile(`z+`)
	fmt.Println(zp.Split("pizza", -1)) // [pi a]
	fmt.Println(zp.Split("pizza", 0))  // []
	fmt.Println(zp.Split("pizza", 1))  // [pizza]
	fmt.Println(zp.Split("pizza", 2))  // [pi a]
}

几点注意

  • 为了避免字符转义,要写很多\, 正则表达式通常用反引号定义
func Example() {
	// Compile the expression once, usually at init time.
	// Use raw strings to avoid having to quote the backslashes.
	var validID = regexp.MustCompile(`^[a-z]+\[[0-9]+\]$`)

	fmt.Println(validID.MatchString("adam[23]")) //true
	fmt.Println(validID.MatchString("eve[7]"))   //true
	fmt.Println(validID.MatchString("Job[48]"))  //false
	fmt.Println(validID.MatchString("snakey"))   //false
}
// i : case insensitive
fmt.Println(regexp.MatchString(`abc`, "Abc"))     //false
fmt.Println(regexp.MatchString(`(?i)abc`, "Abc")) //true

// m : multi-line mode: ^ and $ match begin/end line in addition to begin/end text
fmt.Println(regexp.MustCompile(`aaa$`).FindAllString("aaa\naaa", -1))     //[aaa]
fmt.Println(regexp.MustCompile(`(?m)aaa$`).FindAllString("aaa\naaa", -1)) //[aaa aaa]
	
// s : let . match \n
fmt.Println(regexp.MatchString(`^a.*b$`, "ab"))        //true
fmt.Println(regexp.MatchString(`^a.*b$`, "a\nb"))      //false
fmt.Println(regexp.MatchString(`(?s)^a.*b$`, "a\nb"))  //true

greedy := regexp.MustCompile(`a.+`)
nonGreedy := regexp.MustCompile(`a.+?`)
fmt.Println(greedy.FindString("abcd"))    //abcd
fmt.Println(nonGreedy.FindString("abcd")) //ab

greedy = regexp.MustCompile(`ab*`)
nonGreedy = regexp.MustCompile(`ab*?`)
fmt.Println(greedy.FindString("abbbb"))    //abbbb
fmt.Println(nonGreedy.FindString("abbbb")) //a

greedy = regexp.MustCompile(`(?U)ab*`)
nonGreedy = regexp.MustCompile(`(?U)ab*?`)
fmt.Println(greedy.FindString("abbbb"))    //a
fmt.Println(nonGreedy.FindString("abbbb")) //abbbb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值