方法 | 匹配字串类型 | 返回值 | 返回类型 |
---|---|---|---|
FindSubmatch | [ ]byte | [第一匹配值 值分组1 值分组2 ] | [ ][ ]byte |
FindSubmatch | string | [第一匹配值 值分组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]]