go正则表达式

func main() {
    TestRegx()
}

func TestRegx() {
    content := "helloabbyab"
    pattern := "ab+"

    //判断是否存在。一般没有什么太大价值。
    match, err := regexp.MatchString(pattern, content)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(match) //true

    //Compile解析并返回一个正则表达式。如果成功返回,该Regexp就可用于匹配文本。
    regex, err := regexp.Compile(pattern) //这里要传递正则表式
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(regex)
    res := regex.FindAllString(content, -1) //第一个参数是匹配的文本。第二个参数是匹配次数,负数代表匹配所有。
    fmt.Println(res)                        //[abb ab]

    //+:匹配前面的子表达式一次或多次
    //?:匹配前面的子表达式零次或一次.代表非贪婪模式。越少越好(优先跳出重复)
    pattern = "ab+?"
    regex, _ = regexp.Compile(pattern)
    res = regex.FindAllString(content, -1)
    fmt.Println(res) // [ab ab]

    //如果要匹配abbyab呢?
    //.:匹配除 "\n" 之外的任何单个字符
    //*:匹配前面的子表达式零次或多次。*和+都是贪婪模式,取得越多越好。
    pattern = "a.*b"
    regex, _ = regexp.Compile(pattern)
    res = regex.FindAllString(content, -1)
    fmt.Println(res) // [abbyab]

    pattern = "a.+?b" //.+代表a后面至少要匹配一个任意字符(非"\n"),加上?代表非贪婪模式,点到为止。所以不会取到abbyab
    regex, _ = regexp.Compile(pattern)
    res = regex.FindAllString(content, -1)
    fmt.Println(res) // [abb]

    content = `
        'FORMAT' => 'PNG',
        'FORMAT' => 'JPG',
        'IP' => 127.8.2.1,
    `
    pattern = "'FORMAT'.*=>(.*),"
    regex, _ = regexp.Compile(pattern)
    //用括号包起想要匹配的值。只会返回符合条件的第一个值.匹配不到返回空切片[]
    res = regex.FindStringSubmatch(content)
    fmt.Println(res) //FORMAT' => 'PNG',  'PNG']
    if len(res) > 1 {
        fmt.Println("匹配到的结果是:", res[1]) //匹配到的结果是:  'PNG'
    }
    //返回匹配的所有值
    resAll := regex.FindAllStringSubmatch(content, -1)
    fmt.Println(resAll) //[['FORMAT' => 'PNG',  'PNG'] ['FORMAT' => 'JPG',  'JPG']]

    //怎么替换呢?比如把匹配到的PNG改为PDF
    new := regex.ReplaceAllLiteralString(content, "PDF") //这个会将 'FORMAT' => 'PNG',一整个替换成PDF。
    fmt.Println(new)

    new = regex.ReplaceAllString(content, "PDF") //这个也会将 'FORMAT' => 'PNG', 一整个替换成PDF。
    fmt.Println(new)

    //这个依旧会将 'FORMAT' => 'PNG', 一整个替换成PDF。
    new = regex.ReplaceAllStringFunc(content, func(rel string) string {
        return "PDF"
    })
    fmt.Println(new)
    //上面三个表达式都是输出:
    // PDF
    // PDF
    // 'IP' => 127.8.2.1,

    //但是我只想要变成FORMAT' => 'PDF',即只要替换子匹配的值,将PNG改为PDF.
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值