Regex在Go中不匹配



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

然而,在regex游乐场中,它匹配得很好:https://regex101.com/r/VNDXcQ/2.

它匹配JS注释。

这是代码:

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

为什么会这样?

有两个主要问题:

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

你可以用解决这个问题

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

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

请参阅去游乐场。

最新更新