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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-12 19:47:021073浏览

How to Workaround Lookarounds in Go Regular Expressions?

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

尝试在 Go 中编译正则表达式时,用户可能会遇到以下解析错误:

error parsing regexp: invalid or unsupported Perl syntax: (?!

尝试使用环视运算符(?!...,不支持该运算符)时通常会引发此错误在 Go 的正则表达式语法中。

理解 Lookarounds

Lookarounds 是一种特殊类型的正则表达式运算符,仅当模式后面或前面没有另一个特定模式时才用于匹配该模式。情况下, (?! 用于检查给定字符串是否不以文本“On”开头。

Go Regexp解决方法

由于 Go 不支持环视,因此有几种可用的解决方法:

使用单独的正则表达式

一种方法是使用两个单独的正则表达式:

nonOnRegex := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")
onOnRegex := regexp.MustCompile("^On.*On\s.+?wrote:")

然后您可以检查 nonOnRegex 是否与字符串和onOnRegex 无法匹配以确定所需的结果。

使用可选捕获组

另一种解决方法是使用可选捕获组:

regex := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)

使用此正则表达式匹配字符串后,您可以检查第一个捕获组是否存在且以“On”结尾。如果是,则返回 false,否则返回 true。

通过实现这些解决方法之一,您可以有效地复制 Go 正则表达式语法中的环视功能。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn