登录
首页 >  Golang >  Go问答

Go 正则表达式支持连续匹配吗?

来源:stackoverflow

时间:2024-02-21 13:42:26 361浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《Go 正则表达式支持连续匹配吗?》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我发现其他一些语言支持连续匹配锚 \G

\G 锚点指定匹配必须发生在上一个匹配结束的位置。

https://learn.microsoft.com/en-us/dotnet/standard/base-types/anchors-in-regular-expressions#contigious-matches-g

但我发现 \G 在 Golang 正则表达式中是无效标记。相当于什么?


解决方案


似乎不支持 \gpackage docs状态:

在 re2 中,明确不支持 \g,perl 除外:

regexp类型的方法中,没有任何强制连续匹配的方法。如果您绝对必须实现此结果,您可能必须编写自定义代码。

hacky 演示代码:

package main

import (
    "fmt"
    "regexp"
    "strings"
)

const s = "foo,bar,baz,qu!ux,foox"

func main() {

    re, err := regexp.Compile(`\w+,?`)
    if err != nil {
        panic(err)
    }
    matches := re.FindAllString(s, -1)

    var (
        split             int
        curidx            int
    )
    for _, m := range matches {
        if strings.Index(s, m) != curidx {
            break
        }
        curidx += len(m)
        split++

    }
    contiguousMatches := matches[:split]
    fmt.Println(contiguousMatches) // [foo, bar, baz, qu]
}

本篇关于《Go 正则表达式支持连续匹配吗?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>