解析正则表达式时出错:无效的 Perl 语法 - 了解问题并寻找解决方法
尝试编译正则表达式“^(? !On.*On\s. ?wrote:)(On\s(. ?)wrote:)$" Go 中的常见错误遇到的是:
error parsing regexp: invalid or unsupported Perl syntax: (?!
这个错误源于 Go 不支持lookarounds,这是 Perl 正则表达式中可用的语法功能,允许负向lookaheads,如 (?!.
理解 Lookaround 语法
在正则表达式中,lookaround 是一个断言的元字符不消耗输入字符串中任何字符的条件。由 (?! 表示的负向前查找,断言以下表达式不应在当前位置匹配。
Go Regex Workaround
由于Go不支持lookarounds,所以不能直接使用上面的正则表达式,而是使用多个正则表达式和条件检查的解决方法。必需:
r1 := regexp.MustCompile(`^On\s(.+?)wrote:$`) r2 := regexp.MustCompile(`^On.*On\s.+?wrote:`) match1 := r1.MatchString(inputString) match2 := r2.MatchString(inputString) if match1 && !match2 { // The string does not contain "On ... On" but contains "On ..." // Handle match }
或者,您可以使用可选的捕获组并在成功匹配后检查该组的内容:
r := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`) match := r.FindStringSubmatch(inputString) if match != nil { // Handle match if match[1] != "" { // Group 1 ends with "On" } }
附加说明
以上是如何解决 Go 正则表达式中的环视问题?的详细内容。更多信息请关注PHP中文网其他相关文章!