gpt4 book ai didi

regex - 如何在Go中将正则表达式与反向引用匹配?

转载 作者:行者123 更新时间:2023-12-01 22:21:58 24 4
gpt4 key购买 nike

我需要匹配在Go代码中使用反向引用(例如\ 1)的正则表达式。

这并不是一件容易的事,因为在Go中,official regexp package使用了RE2 engine,它具有chosen to not support backreferences(以及一些其他鲜为人知的功能),因此可以保证线性时间执行,因此避免了regex denial-of-service attacks。 RE2不支持启用反向引用支持。

在我的代码中,没有攻击者恶意利用的风险,我需要反向引用。

我该怎么办?

最佳答案

正则表达式非常适合使用正则语法,但是如果您的语法不是正则语法(即需要反向引用和类似的东西),则应该切换到更好的工具。有很多不错的工具可用于解析上下文无关的语法,包括默认情况下Go分发附带的yacc。另外,您也可以编写自己的解析器。例如,Recursive descent parsers可以很容易地手工编写。

我认为正则表达式在脚本语言(如Perl,Python,Ruby等)中被过度使用,因为它们的C / ASM驱动实现通常比那些语言本身更加优化,但是Go并不是这种语言。正则表达式通常很慢,通常根本不适合该问题。

关于regex - 如何在Go中将正则表达式与反向引用匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62791297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com