首页 > 后端开发 > Golang > 正文

为什么 Go Regex 会抛出'无效或不受支持的 Perl 语法:(?!”错误以及如何解决该错误?

Mary-Kate Olsen
发布: 2024-11-16 17:52:03
原创
842 人浏览过

Why Does Go Regex Throw a

Go 正则表达式解析错误:(?!

尝试在 Go 中编译以下正则表达式时,发生错误:

error parsing regexp: invalid or unsupported Perl syntax: (?!
登录后复制

这个错误源于Go正则表达式引擎不支持lookarounds,a Perl 特定的语法是正则表达式模式,用于检查当前位置周围是否存在特定模式,这使得它们对于某些复杂的文本匹配任务不可或缺。

解决方法

由于 Go 本身不支持环视,因此解决方法涉及手动检查所提供的特定模式是否存在。正则表达式:

^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$
登录后复制

可以采用以下方法:

  • 使用两个单独的正则表达式模式来检查所需的是否存在(第二个模式)和不存在(第一个模式)模式。
  • 编译模式:
absencePattern := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")
presencePattern := regexp.MustCompile("^(On.*On\s.+?wrote:$")
登录后复制
  • 对输入字符串执行检查:
if absencePattern.MatchString(input) && !presencePattern.MatchString(input) {
  // The pattern is absent
} else {
  // The pattern is present
}
登录后复制

附加选项

或者,您可以使用可选的捕获组来实现相同的效果结果:

pattern := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
if match := pattern.FindStringSubmatch(input); match != nil { // match is nil if no match found
  if match[1] != "" { // Group 1 ends with "On"
    return false
  }
  return true
}
登录后复制

这种方法消除了对单独正则表达式模式的需要,简化了代码,同时保持了所需的功能。

以上是为什么 Go Regex 会抛出'无效或不受支持的 Perl 语法:(?!”错误以及如何解决该错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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