文章目录
-
-
- 正则表达式对象 Regexp
-
- 函数 Complie
- 函数 CompliePOSIX
- 函数 MustCompile
- 函数 MustCompliePOSIX
- 方法 String
- 方法 LiteralPrefix
- 方法 NumSubexp
- 方法 SubexpNames
- 方法 Longest
- 方法 Match
- 方法 MatchString
- 方法 MatchReader
- 方法 Find
- 方法FindString
- 方法 Findindex
- 方法 FindStringIndex
- 方法 FindReaderIndex
- 方法 FindSubmatch
- 方法 FindStringSubmatch
- 方法 FindSubmathcIndex
- 方法FindStringSubmatchIndex
- 方法 FindReaderSubmatchIndex
- 方法 FindAll
- 方法 FindAllString
- 方法 FindAllIndex
- 方法 FindAllStringIndex
- 方法 FindAllSubmatch
- 方法 FindAllStringSubmatch
- 方法 FindAllSubmatchIndex
- 方法 FindAllStringSubmatchIndex
- 方法 Split
- 方法 Expand
- 方法 ExpandString
- 方法 ReplaceAllLiteral
- 方法 ReplaceAllLiteral
- 方法 ReplaceAll
- 方法 ReplaceAllString
- 方法 ReplaceAllFunc
- 方法 ReplaceAllStringFunc
-
正则表达式基本和 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(