regex - 随机生成器匹配正则表达式?

标签 regex go

有没有收到 regex 的 go 包?作为输入并返回与该正则表达式匹配的随机字符串,或者您能指导我如何实现这样的解决方案吗?

我的第一个想法是从/dev/rand 循环生成随机字节,然后返回一个与正则表达式匹配的字节,但我认为这种蛮力会很耗时,直到我找到一个与正则表达式匹配的字符串。

用例:

我打算将其用于 Web 服务测试库。

  • 一些 API 调用(例如注册用户帐户)需要唯一字段,例如电子邮件地址、电话号码等,因此需要基于模式/正则表达式的随机输入生成器。

  • 随机属性还有助于防止过时数据/误报(即在当前测试套件之前存储的数据)。我猜生成器不需要提供加密级别的随机性,而是需要提供类似 GUID 的东西。

最佳答案

Reggen是我编写的一个库,可以从正则表达式生成字符串。它可用于生成您需要的电子邮件地址/电话号码,以及使用正则表达式指定的任何其他内容。

一般来说,提供的正则表达式越具体,它给出的结果就越好。例如,正则表达式 .*@.*\..* 可能生成类似于 F$-^@A"%mk.^uv 的内容,但是 [ a-z]+@[a-z]+\.(com|net|org) 应该会产生更易读的内容,例如 bfeujqp@qtpqby.com

使用库生成电子邮件地址:

import "github.com/lucasjones/reggen"

func main() {
    str, err := reggen.Generate("^[a-z]{5,10}@[a-z]{5,10}\\.(com|net|org)$", 10)
    if err != nil {
        panic(err)
    }
    fmt.Println(str)
}

典型输出:

tpbry@sfmxet.net

关于regex - 随机生成器匹配正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756696/

相关文章:

java regex - 替换多次出现的相同模式

go - 如何比较go模板中的字符串?

go - 接口(interface)[golang]中的字段?

java - 如何在java模式中创建 "or"语句?

java - Twitter 如何验证 URL

go - 如何在Go-lang中发送没有URL编码的查询值?

type-conversion - 将 big.Int 的最后 8 位放入 uint8

go - 将字符串转换为最合适的类型

javascript - 使用 JavaScript,小数点后允许 4 位数字,小数点前允许 2 位数字

regex - swift 2 : How do I split a string without loosing the characters it split on?