我有一个在 Go 中不匹配的正则表达式。但是在正则表达式游乐场中,它匹配得很好:https ://regex101.com/r/VNDXcQ/2 。它匹配 JS 注释。这是代码:comment := "// fallback response. For more information contact support"re := regexp.MustCompile(`/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm`)matches := re.MatchString(comment)fmt.Println(matches) // false为什么会这样?
1 回答
Helenr
TA贡献1780条经验 获得超3个赞
有两个主要问题:
您正在使用正则表达式文字作为字符串正则表达式模式。这意味着,您需要通过将其转换为内联修饰符来删除模式的第一个和最后一个
/
以及“移动”标志m
(?m)
您只匹配第一个匹配项
MatchString
(因为标志不能与正则表达式模式一起传递并且g
标志“不支持”)。您需要使用FindAllString
来获取所有匹配项。
你可以用
re := regexp.MustCompile(`(?m)/\*[\s\S]*?\*/|([^\\:]|^)//.*`)
matches := re.FindAllString(comment, -1)
注意/不是特殊字符,因此不需要转义。
- 1 回答
- 0 关注
- 241 浏览
添加回答
举报
0/150
提交
取消