我有一个正则表达式在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)
注意/
不是特殊字符,因此不需要转义。
请参阅去游乐场。