首页 > 后端开发 > Golang > 如何解决 Go 正则表达式中的环视问题?

如何解决 Go 正则表达式中的环视问题?

Patricia Arquette
发布: 2024-11-24 11:30:16
原创
1011 人浏览过

How to Work Around Lookarounds in Go Regular Expressions?

解析正则表达式时出错:无效的 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"
   }
}
登录后复制

附加说明

  • 使用 regexp.MustCompile 函数编译正则表达式模式,因为它会出现恐慌针对无效表达式,简化错误处理。
  • 提供的解决方法依赖于输入字符串遵循指定格式的假设。如果格式不同,请相应调整正则表达式。

以上是如何解决 Go 正则表达式中的环视问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板