我试图找到一种方法来构建具有给定string
数组的已编译*regexp.Regexp
的{{1}}数据。例如:
interface{}
我想通过re := regexp.MustCompile(`(?P<word>\w+)\s*(?P<num>\d+)`)
和string
数据从re
中的结构构建string
,这些数据可能会被收到int
。< / p>
无法弄清楚如何在Go中做到这一点。请帮帮我。
提前致谢。
答案 0 :(得分:1)
这种库通常称为Xeger,存在于许多语言中,包括go。但是,这个名为regen:它是一个从Go / RE2正则表达式生成随机字符串的工具。
以下是一个例子:
$ regen -n 3 '[a-z]{6,12}(\+[a-z]{6,12})?@[a-z]{6,16}(\.[a-z]{2,3}){1,2}'
iprbph+gqastu@regegzqa.msp
abxfcomj@uyzxrgj.kld.pp
vzqdrmiz@ewdhsdzshvvxjk.pi
基本上,所有regen都会解析它的正则表达式 给出并迭代由regexp / syntax生成的树并尝试 根据结果描述的操作生成字符串。这个 可能会通过编译生成的Regexp进一步优化 进入一个程序,但我不觉得这是值得的,当它是一个 非常小的工具。
可以提供一些其他信息 发现于https://godoc.org/go.spiff.io/regen。
答案 1 :(得分:0)
虽然技术上并非不可能,但这是巨大的工作量。
Go regexp包将正则表达式编译成字节码程序,然后执行搜索字符串。将此字节码反编译回正则表达式并非不可能,但非常困难,而且您无法确定所获得的正则表达式与最初使用的完全相同...例如
/(?:a+)+/
和
/a+/
将被编译为相同的代码进行匹配(表达式在传递给代码生成器之前被“简化”)。
很可能你想找到另一个解决方案,比如在将原始字符串编译成正则表达式对象之前保存原始字符串。