C#代码生成与正则表达式匹配的字符串

时间:2013-07-08 09:02:58

标签: c# regex

我使用正则表达式来验证用户输入。现在我可以配置正则表达式,因此它可以帮助用户查看如何格式化必须输入的示例。

是否可以生成一些与任意正则表达式匹配的字符串?甚至还有可以在某处使用的实现?

更新: 由于许可证,我不能使用REX。还有其他可能吗?

4 个答案:

答案 0 :(得分:7)

尝试使用此应用程序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)

一些解决方案:

(1)如果正则表达式是由您(而不是用户)编写的并且很少更改,为什么要以编程方式创建任何内容?您可以手动创建一些不错的示例。

(2)使用现成的解决方案。 (见其他答案)

(3)Rejection sampling,解决所有随机生成问题的大锤:创建一个随机字符串并检查它是否与正则表达式匹配。如果没有,请再试一次。如果正则表达式非常具体,那么这个解决方案的性能可怕。

(4)实现一个将正则表达式转换为字符串构造树的解析器,该字符串构造树包括例如下面的节点。每个节点都有一个符合某些规则的CreateRandomString方法。创建随机字符串意味着为根节点调用该方法。

连接:遍历所有子子树并按顺序连接结果。

随机选择:选择随机子子树并遍历它。返回结果。

乘法:在a和b之间创建一个随机数n。遍历子树n次并连接结果。

leaf :返回一个常量字符串。

创建解析器是一个棘手的部分:),尤其是嵌套结构。 (我写了一个类似于正则表达式的语法。)

答案 2 :(得分:1)

如评论中所述,Rex工具可以解决问题 -

使用Rex创建与您的模式匹配的字符串:

运行rex.exe,如下所示:

rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here

有关此内容的更多信息:Rex Guide

答案 3 :(得分:0)

几乎肯定不是,不。

在您正在查看的上下文中,通常使用正则表达式来检查字符串是否与给定格式匹配。如果您知道您的格式应该足够好以至于您正在为它编写正则表达式,那么就没有理由不能轻易地生成自己的测试数据。

[编辑 - 看来有几个例子。但这确实忽略了这样一个事实:为了测试你的正则表达式是否正确,你必须已经编写了测试数据。所以你应该已经有了你的字符串。]