首页  >  文章  >  后端开发  >  如何在 Go 的正则表达式中实现负集:避免意外结果的指南

如何在 Go 的正则表达式中实现负集:避免意外结果的指南

Susan Sarandon
Susan Sarandon原创
2024-10-26 07:23:02754浏览

 How to Implement Negative Set in Regex for Go: A Guide to Avoiding Unexpected Results

在 Go 的正则表达式中实现负集

提供的正则表达式旨在捕获不以特定文件扩展名结尾的文件名(例如、htm、html、class、js)。然而,Go 中使用 regexp 包的实现会产生与在线正则表达式解析器不同的结果。

出现这种差异是因为 Go 标准库的 RE2 正则表达式引擎不支持负向查找(即,在原表达)。因此,它无法排除以指定文件扩展名结尾的字符串。

要复制在线正则表达式解析器的行为,您可以考虑以下方法:

  • 使用正向前瞻 (?!.(htm|html|class|js)$): 这断言输入字符串不以指定的文件扩展名之一结尾。
<code class="go">re := regexp.MustCompile(`^(.*\.(?!(htm|html|class|js)$))([^.]*)$`)</code>
  • 使用负向后查找 (? 这断言输入字符串前面没有任何指定的文件扩展名。
<code class="go">re := regexp.MustCompile(`^(.*?)(?<!\.(htm|html|class|js)$)`)</code>
  • 删除负集并使用文字文件扩展名:如果您只需要确保字符串以三个字符的文件扩展名结尾,您可以将表达式简化为:
<code class="go">re := regexp.MustCompile(`.\w{3}$`)</code>

请注意,这些表达式可能会产生不同的结果,因为它们以不同的方式实现逻辑。选择最适合您的用例的方法至关重要。

以上是如何在 Go 的正则表达式中实现负集:避免意外结果的指南的详细内容。更多信息请关注PHP中文网其他相关文章!

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