作者:L呆头_383 | 来源:互联网 | 2024-11-14 20:27
尽管对正则表达式的语法曾经有所了解,但长时间不使用后,即使是简单的匹配模式也可能变得生疏。本文将重点介绍Go语言对正则表达式的支持及其基本用法,帮助大家快速上手。
Go语言中主要使用的正则表达式包是regexp
,通过import "regexp"
即可引入该包。以下是常用的一些函数:
func Match(pattern string, b []byte) (matched bool, error error)
func MatchReader(pattern string, r io.RuneReader) (matched bool, error error)
func MatchString(pattern string, s string) (matched bool, error error)
这些函数分别用于匹配[]byte
切片、string
等数据类型,返回值为布尔值和错误信息。匹配成功返回true
,失败返回false
,错误信息为nil
。
下面是一个简单的示例,用于匹配11位的电话号码:
func IsTelNumber(telNum string) (bool, error) {
m, err := regexp.MatchString("^[0-9]{11}$", telNum)
if m {
return true, err
} else {
return false, err
}
}
fmt.Println("Test Go regexp (telNum)")
retVal, _ := IsTelNumber("15202992212")
if retVal {
fmt.Println("This is a valid telephone number")
} else {
fmt.Println("This is not a valid telephone number")
}
除了基本的匹配功能,正则表达式还可以用于提取、替换和修改数据。Go语言的regexp
包提供了丰富的函数来实现这些功能,主要包括:
func Compile(expr string) (*Regexp, error)
func CompilePOSIX(expr string) (*Regexp, error)
func MustCompile(str string) *Regexp
func MustCompilePOSIX(str string) *Regexp
这些函数用于编译正则表达式,如果表达式合法,将返回一个Regexp
对象。以下是一些常用的Regexp
方法:
func (re *Regexp) Find(b []byte) []byte
func (re *Regexp) FindAll(b []byte, n int) [][]byte
func (re *Regexp) FindAllIndex(b []byte, n int) [][]int
func (re *Regexp) FindAllString(s string, n int) []string
func (re *Regexp) FindAllStringIndex(s string, n int) [][]int
func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string
func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int
func (re *Regexp) FindAllSubmatch(b []byte, n int) [][][]byte
func (re *Regexp) FindAllSubmatchIndex(b []byte, n int) [][]int
func (re *Regexp) FindIndex(b []byte) []int
func (re *Regexp) FindReaderIndex(r io.RuneReader) []int
func (re *Regexp) FindReaderSubmatchIndex(r io.RuneReader) []int
func (re *Regexp) FindString(s string) string
func (re *Regexp) FindStringIndex(s string) []int
func (re *Regexp) FindStringSubmatch(s string) []string
func (re *Regexp) FindStringSubmatchIndex(s string) []int
func (re *Regexp) FindSubmatch(b []byte) [][]byte
func (re *Regexp) FindSubmatchIndex(b []byte) []int
这些方法用于处理符合正则表达式规则的字符串和切片。下面是一个简单的示例,用于处理HTTP响应中的HTML内容:
resp, err := http.Get("http://www.baidu.com")
if err != nil {
fmt.Println("Error fetching response from Baidu")
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading HTTP response")
return
}
src := string(body)
// Remove STYLE tags
re, _ := regexp.Compile("")
src = re.ReplaceAllString(src, " ")
// Remove SCRIPT tags
re, _ = regexp.Compile("")
src = re.ReplaceAllString(src, " ")
// Remove all HTML tags and replace with newlines
re, _ = regexp.Compile("<[\S\s]*?>")
src = re.ReplaceAllString(src, "\n")
本文仅作为正则表达式的入门介绍,希望对大家有所帮助。