【问题标题】:Does the Golang's regexp package parse regex differently than others?Golang 的 regexp 包解析正则表达式的方式与其他包不同吗?
【发布时间】:2021-08-27 22:08:14
【问题描述】:

解析正则表达式时,Golang 的行为不符合预期。我已经在 regextester 上测试了我的 reg 短语,它似乎按预期工作。这是我的代码:

func main() {
    tags := regexp.MustCompile(`[^,\s][^\,]*[^,\s]`).Split("foo, bar, baz", -1)
    fmt.Println(tags)
}

Golang,在我的本地环境和操场上,返回 [ , , ] 应该返回 ["foo", "bar", "baz"]

【问题讨论】:

  • 所有正则表达式引擎解析正则表达式的方式不同,因为它们是唯一的实现。这里的问题是您使用的是Split,它期望一个正则表达式匹配分隔符,但您传入一个正则表达式以获得完整匹配。对于Split,正确的正则表达式类似于,\s*

标签: regex go parsing


【解决方案1】:

你需要提取匹配FindAllString:

tags := regexp.MustCompile(`[^,\s][^,]*[^,\s]`).FindAllString("foo, bar, baz", -1)

请参阅Go playground

请注意,您不需要在正则表达式中的任何地方转义逗号,[^\,] 更简洁地写为[^,]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多