Golang正则模块使用

最近在开发过程中会遇到一些字符串匹配相关的内容,正好去大概学习了下Golang中的regexp模块。因为目前正则模块对我来说更多的就是去匹配并处理字符串的,因此目前主要关注几个返回为string类型的方法。

regexp模块的结构体和方法定义

//正则结构体
type Regexp struct {
        // contains filtered or unexported fields
}

//初始化结构体对象的方法
func Compile(expr string) (*Regexp, error)
func CompilePOSIX(expr string) (*Regexp, error)
func MustCompile(str string) *Regexp
func MustCompilePOSIX(str string) *Regexp


//结构体方法.常用的几个
//在字符串s中查找完全匹配正则表达式re的字符串.如果匹配到就停止不进行全部匹配,如果匹配不到就输出空字符串
func (re *Regexp) FindString(s string) string

//在字符串s中匹配re表达式,n表示匹配的次数,-1表示匹配整个字符串。返回字符串切片
func (re *Regexp) FindAllString(s string, n int) []string

//在src中匹配re,并替换为repl,该种方式中repl中的$符号会展开实际的变量,通常用在回溯查找中
func (re *Regexp) ReplaceAllString(src, repl string) string

//在src中匹配re,并替换为repl,该方法会按照repl中的字面意思进行替换,不支持高级变量匹配,比如回溯等等
func (re *Regexp) ReplaceAllLiteralString(src, repl string) string


//在字符串中是否匹配到re定义的字符串,匹配返回true
func (re *Regexp) MatchString(s string) bool

简单示例

$ cat regexp-test.go
/**
 * @File Name: test.go
 * @Author:
 * @Email:
 * @Create Date: 2017-12-24 15:12:31
 * @Last Modified: 2017-12-24 16:12:12
 * @Description:
 */
package main

import (
	"fmt"
	"regexp"
)

func main() {
  testString := "k8s-test-pod-12343k811sadsxsakxz-test-k8s-container.k8s-@xxbandy.github.io"
	re := regexp.MustCompile("k8s?")
  fmt.Println("src string:",testString)
  fmt.Println("regular expression:",re)

  fmt.Println("FindAllString matching all:",re.FindAllString(testString,-1))
  fmt.Println("FindAllString matching twice:",re.FindAllString(testString,2))
  fmt.Println("FindString:",re.FindString(testString))
  fmt.Println("ReplaceAllString:",re.ReplaceAllString(testString,"biaoge"))
  fmt.Println("ReplaceAllLiteralString:",re.ReplaceAllLiteralString(testString,"BIAOGE"))
  fmt.Println("Match String:",re.MatchString(testString))
}

$ go run regexp-test.go
src string: k8s-test-pod-12343k811sadsxsakxz-test-k8s-container.k8s-@xxbandy.github.io
regular expression: k8s?
FindAllString matching all: [k8s k8 k8s k8s]
FindAllString matching twice: [k8s k8]
FindString: k8s
ReplaceAllString: biaoge-test-pod-12343biaoge11sadsxsakxz-test-biaoge-container.biaoge-@xxbandy.github.io
ReplaceAllLiteralString: BIAOGE-test-pod-12343BIAOGE11sadsxsakxz-test-BIAOGE-container.BIAOGE-@xxbandy.github.io
Match String: true

不论是哪种语言的正则模块,个人认为语法都不是最重要的,最重要我认为还是正则表达式本身,如果对正则表达式本身认识比较深的话,不论用哪种语言工具都可以很灵活的处理各种业务场景。这里附上一篇当年写的正则表达式相关的文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

厚土Go学习笔记 | 30. Stringers的一个练习

让 IPAddr 类型实现 fmt.Stringer 以便用点分格式输出地址。 例如,IPAddr{1, 2, 3, 4} 应当输出 "1.2.3.4"。 这个...

37811
来自专栏Java3y

JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】

什么是EL表达式? 表达式语言(Expression Language,EL),EL表达式是用"${}"括起来的脚本,用来更方便的读取对象! EL表达式主要用来...

5007
来自专栏ACM算法日常

棋盘(数学趣味题) - HDU 5100

Consider the problem of tiling an n×n chessboard by polyomino pieces that are k×...

823
来自专栏守候书阁

实例感受-es6的常用语法和优越性

前几天,用es6的语法重写了我的一个代码库,说是重写,其实改动的并不多,工作量不大。在重写完了的时候,就个人总结了一下es6常用的一些常用的语法和比es5优越的...

853
来自专栏Golang语言社区

厚土Go学习笔记 | 15. defer语句延迟函数的执行

当函数中有defer语句,会延迟此语句的执行,直到函数返回后才执行。 defer fmt.Println("") defer后面的是参数 延迟调用的参数是立刻生...

2798
来自专栏积累沉淀

Java IO结构各种流详解

花了两天时间研究了一下Java IO的流,对于各种流,加深了一下理解 首先看我做的思维导图 ? 文件流 public class FileIO { ...

6619
来自专栏偏前端工程师的驿站

JS魔法堂:那些困扰你的DOM集合类型

一、前言                                     大家先看看下面的js,猜猜结果会怎样吧!   可选答案:   ①. 获取id属...

2419
来自专栏陈仁松博客

UWP基础教程 - XAML类型转换器

在XAML中每一个元素对象对应一个实例,而实例属性可以通过属性进行赋值。在实际项目开发中,对象元素的属性值可以是不同数据类型,根据需求不同,经常需要对数据类型进...

4367
来自专栏张善友的专栏

深入浅出事件流处理NEsper(二)

NEsper使用的事件类型来描述事件的类型信息。你的应用在启动时可能预先配置定义事件类型,或者在运行时通过API或EPL语法动态的增加事件类型。 EPL中的cr...

20010
来自专栏机器学习从入门到成神

Java之next()与nextline区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

3681

扫码关注云+社区

领取腾讯云代金券