02-查找正则匹配字串、查找正则匹配字串的位置
@
目录
1. Find系列方法(查找匹配)
方法 | 匹配字串类型 | 返回值 | 返回类型 |
---|---|---|---|
Find() | []byte | 第一个匹配 | []byte |
FindString() | string | 第一个匹配 | string |
FindAll() | []byte | 所有匹配 | [][]byte |
FindAllString() | string | 所有匹配 | []string |
1.1 Find()
语法
func (re *Regexp) Find(b []byte) []byte
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*\\.")
myString := "10.10.239.11"
result := reg.Find([]byte(myString))
fmt.Printf(string(result))
}
- 结果
10.10.239.
如果要最短匹配,正则用:
.*?
1.2 FindString()
语法
func (re *Regexp) FindString(s string) string
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*?\\.")
myString := "10.10.239.11"
result := reg.FindString(myString)
fmt.Printf(result)
}
- 结果
10.
1.3 FindAll()
语法
func (re *Regexp) FindAll(b []byte, n int) [][]byte
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*?\\.")
myString := "10.10.239.11"
result := reg.FindAll([]byte(myString),-1)
for _,i := range result {
fmt.Printf("%s\n",string(i))
}
}
- 结果
10.
10.
239.
- 如果用贪婪匹配
reg := regexp.MustCompile(".*\\.")
则结果为
10.10.239.
1.4 FindAllString()
语法
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*?\\.")
myString := "10.10.239.11"
result := reg.FindAllString(myString,-1)
for _,i := range result {
fmt.Printf("%s\n",i)
}
}
- 结果
10.
10.
239.
2. FindIndex系列方法(查找匹配位置)
方法 | 匹配字串类型 | 返回值 | 返回类型 |
---|---|---|---|
FindIndex() | [ ]byte | 第一个匹配的位置 | [ ]nit |
FindStringIndex() | String | 第一个匹配的位置 | [ ]nit |
FindReaderIndex() | Reader | 第一个匹配的位置 | [ ]nit |
FindAllIndex() | [ ]byte | 所有匹配的位置 | [ ][ ]nit |
2.1 FindIndex()
语法
func (re *Regexp) FindIndex(b []byte) (loc []int)
完整示例
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*?\\.")
myString := "10.10.239.11"
s := reg.Find([]byte(myString))
p := reg.FindIndex([]byte(myString))
fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
- 结果
匹配到字串为:10.
位置分别为:[0 3]
如上可见,匹配到字串
10.
是原字串10.10.239.11
的0
位置起 到3
位置之前。
2.2 FindStringIndex()
语法
func (re *Regexp) FindStringIndex(s string) (loc []int)
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*?\\.")
myString := "10.10.239.11"
s := reg.FindString(myString)
p := reg.FindStringIndex(myString)
fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
- 结果
匹配到字串为:10.
位置分别为:[0 3]
2.3 FindReaderIndex()
语法
func (re *Regexp) FindReaderIndex(r io.RuneReader) (loc []int)
完整示例
- 代码
package main
import (
"bytes"
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(".*?\\.")
myString := "10.10.239.11"
myReader := bytes.NewReader([]byte(myString))
s := reg.Find([]byte(myString))
p := reg.FindReaderIndex(myReader)
fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
- 结果
匹配到字串为:10.
位置分别为:[0 3]
2.4 FindAllIndex()
语法
func (re *Regexp) FindAllIndex(b []byte, n int) [][]int
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile("\\d+\\.")
myString := "10.10.239.11"
s := reg.FindAll([]byte(myString),-1)
p := reg.FindAllIndex([]byte(myString),-1)
fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
- 结果
匹配到字串为:[10. 10. 239.]
位置分别为:[[0 3] [3 6] [6 10]]
如上可见:
匹配到了三个字串10.
10.
239.
分别在原字串的:
- 起始位置
0
,结束位置3
之前- 起始位置
3
,结束位置6
之前- 起始位置
6
,结束位置10
之前
2.5 FindAllStringIndex()
语法
func (re *Regexp) FindAllStringIndex(s string, n int) [][]int
完整示例
- 代码
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile("\\d+\\.")
myString := "10.10.239.11"
//myReader := bytes.NewReader([]byte(myString))
s := reg.FindAllString(myString,-1)
p := reg.FindAllStringIndex(myString,-1)
fmt.Printf("匹配到字串为:%s\n位置分别为:%d",s,p)
}
- 结果
匹配到字串为:[10. 10. 239.]
位置分别为:[[0 3] [3 6] [6 10]]