首页 > 后端开发 > Golang > 如何解决 Go Regex 中的环视问题?

如何解决 Go Regex 中的环视问题?

Barbara Streisand
发布: 2024-11-30 16:45:11
原创
203 人浏览过

How to Work Around Lookarounds in Go Regex?

解析正则表达式时出错:无效的 Perl 语法 (?!

尝试在 Go 中使用正则表达式时,遇到错误:

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

此错误特别发生在以下情况正则表达式:

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

解决方案

出现此问题是因为 Go 正则表达式不支持环视,与 Perl 不同,环视是检查周围文本而不消耗它的断言。

要解决此限制,请使用不同的方法:

首先,编译两个单独的常规表达式:

first := regexp.MustCompile(`^On\s(.+?)wrote:$`)
second := regexp.MustCompile(`^On.*On\s.+?wrote:`)
登录后复制

然后,执行以下步骤:

  1. 检查第一个是否与字符串匹配。
  2. 如果匹配,则继续执行步骤 3。否则,请执行步骤 3。 ,字符串与两个表达式都不匹配,因此返回 true。
  3. 检查第二个是否与string.
  4. 如果匹配,则字符串与第二个表达式匹配,因此返回 false。否则返回 true。

或者,您可以使用可选的捕获组来简化过程。 :

regex := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
登录后复制

检查匹配项,如果满足以下条件则返回 true:

  • 第 1 组结束与 On。
  • 组 1 不存在或不以 On 结尾。

否则,返回 false。

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

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