我使用正则表达式来验证用户输入。现在我可以配置正则表达式,因此它可以帮助用户查看某个特定输入如何格式化的示例。C#代码来生成匹配正则表达式的字符串
是否有可能生成一些匹配任意正则表达式的字符串?甚至有一个实现可用的地方?
更新: 由于许可证我不能使用REX。还有其他可能性吗?
我使用正则表达式来验证用户输入。现在我可以配置正则表达式,因此它可以帮助用户查看某个特定输入如何格式化的示例。C#代码来生成匹配正则表达式的字符串
是否有可能生成一些匹配任意正则表达式的字符串?甚至有一个实现可用的地方?
更新: 由于许可证我不能使用REX。还有其他可能性吗?
尝试使用这个应用程序雷克斯能做到这一点:)
http://research.microsoft.com/en-us/projects/rex/
对于Java这是 https://code.google.com/p/xeger/
所以有很多的正则表达式匹配发电机:)
这: https://github.com/moodmosaic/Fare
这是xeger在C#包装
在评论中指定几乎肯定不是,不。
在您查看的上下文中,通常使用正则表达式来检查字符串是否与给定格式相匹配。如果你知道你的格式应该足够好以至于你正在写一个正则表达式,那么你应该没有理由不能轻易地生成你自己的测试数据。
[编辑 - 它似乎有一些例子。但是这确实忽略了这样一个事实,为了测试你的正则表达式是否正确,你必须已经写好了测试数据。所以,你应该已经有你的字符串。]
,獭工具会做的伎俩 -
使用雷克斯创建符合模式的字符串:如下
运行rex.exe
:
rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here
对此的详细信息:Rex Guide
一些解决方案:
(1)如果正则表达式是由您(而不是由用户)编写的并且很少发生更改,为什么以编程方式创建任何东西?你可以手工创建一些很好的例子。
(2)使用现成的解决方案。 (看到其他答案)
(3)Rejection sampling,大锤解决所有随机生成问题:创建一个随机字符串,并检查它是否匹配正则表达式。如果不是,请再试一次。如果正则表达式非常具体,那么这个解决方案的性能很差。 (4)实现将正则表达式转换为字符串构造树的解析器,该构造树例如由以下构成:下面的节点。每个节点都有一个遵循特定规则的CreateRandomString
方法。创建一个随机字符串意味着为根节点调用该方法。
concatenation:遍历所有子子树并按顺序连接结果。
随机选择:选择一个随机的子树并遍历它。返回结果。
乘法:在a和b之间创建一个随机数n。遍历子树n次并连接结果。
叶:返回一个常量字符串。
创建解析器是一个棘手的部分:),尤其是嵌套结构。 (我写了一个类似于正则表达式的语法。)
由于.net框架的正则表达式解析器是纯管理的,因此我会讨论数字4。但后来我发现票价相当不错。正则表达式的变化,有几个,他们也可以由用户配置(不是终端用户);) – schoetbi
我建议你看看:http://research.microsoft.com/en-us/projects/rex/,他们做了这样的事情。请让我知道这对你有没有用。 –
看看这个网站:http://debuggex.com。输入你想要的任何正则表达式,然后看看“一些随机匹配”部分。当您的正则表达式开始变得复杂时,您可能会感到惊讶。 – Stephan
'。*'可能产生什么? – Toto