go 正则表达式

本文详细介绍了Go语言中正则表达式的使用,包括转义字符串、检测匹配子序列以及Regexp对象的各种方法,如Match、Find、ReplaceAll等,帮助开发者更好地理解和运用正则表达式在Go中的功能。
摘要由CSDN通过智能技术生成


正则表达式基本和 python 的一致

regexp 标准库文档:https://studygolang.com/pkgdoc

将 正则表达式字符串 转义为普通字符串:
func QuoteMeta(s string) string

例如,QuoteMeta('a.b')会返回'a\.b'

检测字符串中是否含有匹配在 pattern 的子序列
func Match(pattern string, b []byte) (matched bool, err error)
func MatchString(pattern string, s string) (matched bool, err error)
func MatchReader(pattern string, r io.RuneReader) (matched bool, err error)

这a个函数类似,一个匹配对象是二进制切片,一个匹配对象是字符串,一个匹配对象是 io.RuneReader,使用举例:

matched, err := regexp.MatchString("foo.*", "seafood")
fmt.Println(matched, err)
matched, err = regexp.MatchString("bar.*", "seafood")
fmt.Println(matched, err)
matched, err = regexp.MatchString("a(b", "seafood")
fmt.Println(matched, err)
fmt.Println("--------------------------------------")

 matched, err = regexp.Match("foo.*", []byte("seafood"))
 fmt.Println(matched, err)
 matched, err = regexp.Match("bar.*", []byte("seafood"))
 fmt.Println(matched, err)
 matched, err = regexp.Match("a(b", []byte("seafood"))
 fmt.Println(matched, err)

 fmt.Println("--------------------------------------")
 f, err := os.Open("/home/hongyu/go/src/test/regexp/matchreader.txt")
 if err != nil {
   
  fmt.Println("open file err", err)
 }
 rr := bufio.NewReader(f)
 defer f.Close()

 matched, err = regexp.MatchReader("foo.*", rr)
 fmt.Println(matched, err)
 matched, err = regexp.MatchReader("bar.*", rr)
 fmt.Println(matched, err)
 matched, err = regexp.MatchReader("a(b", rr)
 fmt.Println(matched, err)
/* 输出
true <nil>
false <nil>
false error parsing regexp: missing closing ): `a(b`
*/

正则表达式对象 Regexp

type Regexp struct {
   
    // 内含隐藏或非导出字段
}

Regexp 表示一个编译好的正则表达式

函数 Complie
func Compile(expr string) (*Regexp, error)

Compile 用来解析正则表达式 expr 是否合法,如果合法,则返回一个 Regexp 对象

函数 CompliePOSIX
func CompilePOSIX(expr string) (*Regexp, error)

CompilePOSIX 的作用和 Compile 一样, 不同的是,CompilePOSIX 使用 POSIX 语法,同时,它采用最左最长方式搜索,而 Compile 采用最左最短方式搜索.

函数 MustCompile
func MustCompile(str string) *Regexp

MustCompile 类似 Compile 但会在解析失败时 panic,主要用于全局正则表达式变量的安全初始化。

函数 MustCompliePOSIX
func MustCompilePOSIX(str string) *Regexp

MustCompilePOSIX 类似 CompilePOSIX 但会在解析失败时 panic,主要用于全局正则表达式变量的安全初始化。

方法 String
func (re *Regexp) String() string

返回 正则表达式字符串

方法 LiteralPrefix
func (re *Regexp) LiteralPrefix() (prefix string, complete bool)

返回所有匹配项都共同拥有的前缀(去除可变元素)

  • prefix:共同拥有的前缀
  • complete:如果 prefix 就是正则表达式本身,则返回 true,否则返回 false
func main() {
   
    reg := regexp.MustCompile(`Hello[\w\s]+`)
    fmt.Println(reg.LiteralPrefix(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值