Go Regexp:匹配完整单词或子字符串或根本不匹配

Go Regexp:匹配完整单词或子字符串或根本不匹配

问题内容

我正在尝试找到一种使用 Go 将模式与 regexp.Regexp 进行匹配的方法。

比赛的标准如下:

它必须匹配 FooBar 或其子字符串 Foo 在行的开头,或者根本不匹配。如果在 #1 中匹配,则任何一个匹配后面都必须有其他字符(即 S+)

所以,它应该匹配,例如:

匹配:FooABC匹配:FooBarABC不匹配:FooBar(因为后面没有其他字符)不匹配:ABC(因为它不是以 Foo 开头)

我尝试了各种表达方式,但似乎无法理解它。

我发现其他实现中存在负向先行模式,但Go似乎没有提供它。有没有其他方法可以解决这个问题?

参见(已更新):https://regex101.com/r/SWSTzv/3

我知道这显然可以在不使用 regexp 的情况下解决。然而,这个请求的目的是了解这个问题是否可以通过 Go 的 stdlib 实现来解决。

正确答案

为什么不直接反转与正则表达式 ^Foo(?:Bar)?$ 匹配的结果(好吧,不只是)?

  1. package mainimport ( "fmt" "regexp" "strings")func main() { re := regexp.MustCompile(`^Foo(?:Bar)?$`) str := `FooFooBarFooAFooBFooBaFooBaxFooBxrFooBarAbcFooBarFooABCAbcFooBar` for _, s := range strings.Split(str, "") { if strings.HasPrefix(s, "Foo") && !re.MatchString(s) { fmt.Println(s) } }}

登录后复制

输出:

FooAFooBFooBaFooBaxFooBxrFooBarAbcFooBarFoo

登录后复制

在 rextester 上尝试一下。

更新
一种更基于正则表达式并使用技巧 em>.

  1. package mainimport ( "fmt" "regexp" "strings")func main() { re := regexp.MustCompile(`^Foo$|^FooBar$|^(Foo.+)`) str := `FooFooBarFooAFooBFooBaFooBaxFooBxrFooBarAbcFooBarFooABCAbcFooBar` for _, s := range strings.Split(str, "") { submatches := re.FindStringSubmatch(s) if submatches != nil && submatches[1] != "" { fmt.Println(submatches[1]) } }}

登录后复制

在 rextester 上尝试一下。

以上就是Go Regexp:匹配完整单词或子字符串或根本不匹配的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
编程技术

如何从AWS S3下载对象到内存中并通过Go中的请求发送它?

2025-3-1 17:32:32

编程技术

如何完全展开一个小部件并缩小另一个小部件

2025-3-1 17:33:06

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索