【问题标题】:Regex not matching in GoGo中的正则表达式不匹配
【发布时间】:2020-08-21 10:44:50
【问题描述】:

我有一个在 Go 中不匹配的正则表达式。

但是在正则表达式游乐场中,它匹配得很好:https://regex101.com/r/VNDXcQ/2

它与 JS cmets 匹配。

代码如下:

comment := "// fallback response. For more information contact support"
re := regexp.MustCompile(`/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm`)
matches := re.MatchString(comment)
fmt.Println(matches) // false

为什么会这样?

【问题讨论】:

  • 谁以“不可重现或由拼写错误”为理由提交了近距离投票?问题中提供的示例代码中究竟有什么不可重现的?指定的行为是 100% 可重现的。这是它的 Go 游乐场:play.golang.org/p/muUxpBOmOQV。它产生的输出 false 与这个问题中提到的完全一样。真的,是谁在用这个虚假的理由对大多数围棋问题进行近距离投票?他们为什么要这样做?
  • @LoneLearner:完全同意你的观点。从我关注的许多标签中,我只注意到这里不仅仅是正确的MCVE 被否决并投票关闭的体面问题

标签: regex go regex-alternation


【解决方案1】:

主要有两个问题:

  • 您正在使用正则表达式文字作为字符串正则表达式模式。这意味着,您需要通过将第一个和最后一个 / 和“移动”m 标志转换为 (?m) 内联修饰符来将其删除到模式中
  • 您只匹配第一次出现的MatchString(因为标志不能与正则表达式模式一起传递,g 标志“不支持”)。您需要使用FindAllString 获取所有匹配项。

你可以解决这个问题

re := regexp.MustCompile(`(?m)/\*[\s\S]*?\*/|([^\\:]|^)//.*`)
matches := re.FindAllString(comment, -1)

注意/ 不是特殊字符,因此不需要转义。

Go playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多