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中文网其他相关文章!