regex - 负向回顾失败

标签 regex go

我的 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/

相关文章:

php - 用于查找文本中的 URL 并解析它们以获取 uri 的正则表达式

postgresql - 如何在 golang 中使用 mattes/migrate?

go - 使用 ssh 和交互式 shell 时如何模拟按键

http - 嵌套的 ServeMux 总是返回 "301 Moved Permanently"

python - python 中 TfidfVectorizer 中 n-gram 的标记模式

javascript - 匹配条件替换字符串

regex - 文档.querySelectorAll ('a[id="*"]' );和通配符或正则表达式?

python - 正则表达式或在 python 中拆分为 shell awk 等价物

html - 如何使用 Golang 检索所选 HTML 元素的高度?

macos - 在 golang 中使用 exec.Command,如何打开一个新终端并执行命令?