首页  >  文章  >  后端开发  >  为什么我的正则表达式否定集在 Go 中失败?

为什么我的正则表达式否定集在 Go 中失败?

Patricia Arquette
Patricia Arquette原创
2024-10-26 03:14:27666浏览

Why Does My Regex Negated Set Fail in Go?

正则表达式否定集在 Go 中不起作用

在这篇文章中,我们探索了一个无法匹配 Golang 中字符串的正则表达式,因为它在在线正则表达式解析器中执行此操作。该问题源于 Go 的标准库的正则表达式引擎 RE2 不支持否定集。

有问题的正则表达式旨在匹配以下字符串:

  • 以文件扩展名结尾(例如,“.htm”、“.html”、“.class”、“.js”)作为负集(即,不以这些扩展名结尾)。
  • 以任何未提及的字符结尾在负集中而不是句点 (.)

在 Golang 中实现此表达式不会产生与在线正则表达式解析器演示的相同的匹配,因为 Golang 标准库使用的 RE2 缺乏对环视运算符,例如负向先行运算符(“?!”)。

要解决此问题,我们有两个选项:

  • 使用支持环视的库: 我们可以使用支持lookaround的库来实现负lookahead,例如“github.com/google/re2/regexp”包。
  • 简化表达式:如果我们都需要确保字符串以三个字符的文件扩展名结尾,我们可以将表达式简化为“.w{3}$”,它匹配文字句点,后跟字符串末尾的三个字符。

通过使用这两种方法中的任何一种,我们都可以在 Golang 中实现所需的匹配行为。

以上是为什么我的正则表达式否定集在 Go 中失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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