1. FindSubMatch系列方法 (查找匹配字串,可分组)
方法匹配字串类型返回值返回类型
FindSubmatch[ ]byte[第一匹配值 值分组1 值分组2 ][ ][ ]byte
FindSubmatchstring[第一匹配值 值分组1 值分组2 ][ ]string
FindAllSubmatch()[ ]byte返回数组,成员为同上每次匹配的数组[ ][ ][ ]byte
FindAllStringSubmatch()string返回数组,成员为同上每次匹配的数组[ ][ ]string

1.1 FindSubMatch()

语法

func (re *Regexp) FindSubmatch(b []byte) [][]byte
[正则字串完整匹配 正则中分组一的值 正则中分组2的值 ……]

完整示例

package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(.*)\\.(.*)\\.(.*)\\.(.*)")
	myString := "10.10.239.11"
	a := pattern.FindSubmatch([]byte(myString))
	for _,i := range a {
		fmt.Printf("%s\n",string(i))
	}
}
  • 结果
10.10.239.11
10
10
239
11
  • 注意
    正则贪婪匹配也是在整个正则能匹配到结果的基础上。
(.*)\.(.*)\.(.*)\.(.*) .*1010.10.23910.10.239

如果我们把正则如下写:

pattern := regexp.MustCompile("(.*)\\.")

则输入为:

10.10.239.
10.10.239

可见,这次是贪婪匹配到了3段地址。(下边几个match系方法与此相同)

1.2 FindStringSubmatch()

语法

func (re *Regexp) FindStringSubmatch(s string) []string

完整示例

  • 代码
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(.*)\\.(.*)\\.(.*)\\.(.*)")
	myString := "10.10.239.11"
	//myReader := bytes.NewReader([]byte(myString))
	a := pattern.FindStringSubmatch(myString)
	for _,i := range a {
		fmt.Printf("%s\n",i)
	}
}
  • 结果
10.10.239.11
10
10
239
11

1.3 FindAllSubmatch()

语法

func (re *Regexp) FindAllSubmatch(b []byte, n int) [][][]byte

完整示例

  • 代码
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(.*?)\\.(.*?)")
	myString := "10.10.239.11"
	a := pattern.FindAllSubmatch([]byte(myString),-1)
	fmt.Printf("%s\n",a)
}
  • 结果
[[10. 10 ] [10. 10 ] [239. 239 ]]
pattern := regexp.MustCompile("(.*?)\\.")
[[10. 10] [10. 10] [239. 239]]

1.4 FindAllStringSubmatch()

语法

func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string```

完整示例

  • 代码
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(\\d+)\\.(\\d+)")
	myString := "10.10.239.11"
	a := pattern.FindAllStringSubmatch(myString,-1)
	fmt.Printf("%s\n",a)
}
  • 结果
[[10.10 10 10] [239.11 239 11]]
2. FindSubmatchIndex 系列方法
方法匹配字串类型返回值返回类型
FindSubmatchIndex()[ ]byte第一匹配值和分组的位置[ ]int
FindStringSubmatchIndex()string第一匹配值和分组的位置[ ]int
FindReaderSubmatchIndex()io.RuneReader第一匹配值和分组的位置[ ]int
FindAllStringSubmatchIndex()[ ]byte返回数组,成员为同上每次匹配的数组[ ][ ][ ]int
FindAllStringSubmatchIndex()string返回数组,成员为同上每次匹配的数组[ ][ ][ ]int
  • 返回第一匹配值的说明:
    [ 第一匹配值开始位置 第一匹配值结束位置 第一组开始位置 第一组结束位置 第二组开始位置 第二组结束位置 ……]

2.1 FindSubmatchIndex()

语法

func (re *Regexp) FindSubmatchIndex(b []byte) []int

完整示例

package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(\\d+)\\.(\\d+)")
	myString := "10.10.239.11"
	s := pattern.FindSubmatch([]byte(myString))
	p := pattern.FindSubmatchIndex([]byte(myString))
	fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
  • 结果
匹配到字串为:[10.10 10 10]
位置分别为:[0 5 0 2 3 5]
10.100510021035

2.2 FindStringSubmatchIndex()

语法

func (re *Regexp) FindStringSubmatchIndex(s string) []int

完整示例

  • 代码
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(\\d+)\\.(\\d+)")
	myString := "10.10.239.11"
	s := pattern.FindStringSubmatch(myString)
	p := pattern.FindStringSubmatchIndex(myString)
	fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}

  • 结果
匹配到字串为:[10.10 10 10]
位置分别为:[0 5 0 2 3 5]

2.3 FindReaderSubmatchIndex

语法

func (re *Regexp) FindReaderSubmatchIndex(r io.RuneReader) []int

完整示例

  • 代码
package main

import (
	"bytes"
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(\\d+)\\.(\\d+)")
	myString := "10.10.239.11"
	r := bytes.NewReader([]byte(myString))
	s := pattern.FindStringSubmatch(myString)
	p := pattern.FindReaderSubmatchIndex(r)
	fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
  • 示例
匹配到字串为:[10.10 10 10]
位置分别为:[0 5 0 2 3 5]

2.4 FindAllSubmatchIndex()

语法

func (re *Regexp) FindAllSubmatchIndex(b []byte, n int) [][]int

完整示例

  • 代码
package main

import (

	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(\\d+)\\.(\\d+)")
	myString := "10.10.239.11"
	s := pattern.FindAllSubmatch([]byte(myString),-1)
	p := pattern.FindAllSubmatchIndex([]byte(myString), -1)
	fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
  • 结果
匹配到字串为:[[10.10 10 10] [239.11 239 11]]
位置分别为:[[0 5 0 2 3 5] [6 12 6 9 10 12]]

2.5 FindAllStringSubmatchIndex()

语法

func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int

完整示例

  • 代码
package main

import (

	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile("(\\d+)\\.(\\d+)")
	myString := "10.10.239.11"
	//r := bytes.NewReader([]byte(myString))
	s := pattern.FindAllStringSubmatch(myString,-1)
	p := pattern.FindAllStringSubmatchIndex(myString, -1)
	fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
  • 结果
匹配到字串为:[[10.10 10 10] [239.11 239 11]]
位置分别为:[[0 5 0 2 3 5] [6 12 6 9 10 12]]