从Regexp构造String

时间:2018-05-27 17:27:16

标签: regex string go

我试图找到一种方法来构建具有给定string数组的已编译*regexp.Regexp的{​​{1}}数据。例如:

interface{}

我想通过re := regexp.MustCompile(`(?P<word>\w+)\s*(?P<num>\d+)`) string数据从re中的结构构建string,这些数据可能会被收到int。< / p>

无法弄清楚如何在Go中做到这一点。请帮帮我。

提前致谢。

2 个答案:

答案 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+/

将被编译为相同的代码进行匹配(表达式在传递给代码生成器之前被“简化”)。

很可能你想找到另一个解决方案,比如在将原始字符串编译成正则表达式对象之前保存原始字符串。