我的 Golang 代码中有一个 MySQL 表检查器脚本。我想做的最后一件事就是存储任何可能的 enum
当我的应用程序启动时,我可以读取它的值,这样我就可以从缓冲区中读取它,而不必不断地为 API 调用描述表。
现在与 enum
类似 'value1','value2','value\'s3
的东西可能会发生,其中简单的正则表达式如 '(.*?)'
由于 value\'s3
中的转义引号而不起作用。因此,我编写了一个负向后查找,以使其仅当它是非转义引号时才匹配。并非完全完美,但至少有一些额外的检查,而且我自己管理数据库结构,所以我可以对此做一个小记录。
说到重点;负向查找失败 '(.*?)(?<!\\)'
:
panic: regexp: Compile(`'(.*?)(?<!\\)'`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`
代码:
var enumMatchValues = regexp.MustCompile(`'(.*?)(?<!\\)'`)
values := enumMatchValues.FindAllStringSubmatch(theRawEnumValuesString, -1)
lookaheads/lookbehinds 正式不是 RegEx 功能核心的一部分,还是 Golang 尚未实现?
Go 是否有其他解决方法或扩展的 RegEx 包来解决这个问题?
最佳答案
不支持 Lookarounds,您可以使用可能的解决方法:
re := regexp.MustCompile(`'(.*?[^\\]|)'`)
values := re.FindAllStringSubmatch(theRawEnumValuesString, -1)
关于regex - 负向回顾失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785505/