C#代码生成与正则表达式匹配的字符串
我使用正则表达式来validation用户输入。 现在我可以配置正则表达式,因此它可以帮助用户查看如何格式化确定输入的示例。
是否可以生成一些匹配任意正则表达式的字符串? 是否有一个可以在某处使用的实现?
更新:由于许可证,我不能使用REX。 还有其他可能吗?
尝试使用这个应用程序雷克斯可以这样做:)
http://research.microsoft.com/en-us/projects/rex/
对于java,它是https://code.google.com/p/xeger/
所以有很多正则表达式匹配生成器:)
这个: https : //github.com/moodmosaic/Fare
它是c#中的xeger包装器
一些解决方案
(1)如果正则表达式是由您(而不是用户)编写的并且很少更改,为什么要以编程方式创建任何内容? 您可以手动创建一些不错的示例。
(2)使用现成的解决方案。 (见其他答案)
(3) 拒绝抽样 ,大锤解决所有随机生成问题:创建随机字符串并检查它是否与正则表达式匹配。 如果没有,请再试一次。 如果正则表达式非常具体,那么这种解决方案的性能可怕。
(4)实现一个解析器,将正则表达式转换为一个字符串构造树,该树由例如下面的节点组成。 每个节点都有一个遵循某些规则的CreateRandomString
方法。 创建随机字符串意味着为根节点调用该方法。
连接 :遍历所有子子树并按顺序连接结果。
随机选择 :选择一个随机子子树并遍历它。 返回结果。
乘法 :在a和b之间创建一个随机数n。 遍历子树n次并连接结果。
leaf :返回一个常量字符串。
创建解析器是棘手的部分:),尤其是嵌套结构。 (我写了一个类似于正则表达式的语法。)
正如评论中指出的那样,Rex工具会做到这一点 –
使用Rex创建与您的模式匹配的字符串:
运行rex.exe
如下:
rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here
关于此的更多信息: 雷克斯指南
几乎可以肯定不是,不。
在您正在查看的上下文中,通常使用正则表达式来检查字符串是否与给定格式匹配。 如果您知道您的格式应该足够好以至于您正在为它编写正则表达式,那么就没有理由不能轻易地生成自己的测试数据。
[编辑 – 看来有几个例子。 但这确实忽略了这样一个事实:为了测试你的正则表达式是否正确,你必须已经编写了测试数据。 所以你应该已经有了你的字符串。]