9

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

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

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

4

4 回答 4

8

尝试使用这个应用程序 Rex 可以做到这一点:)

http://research.microsoft.com/en-us/projects/rex/

对于 java,它是 https://code.google.com/p/xeger/

所以有很多正则表达式匹配生成器:)

而这个: https ://github.com/moodmosaic/Fare

它是 c# 中的 xeger 包装器

于 2013-07-08T09:09:10.650 回答
2

一些解决方案:

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

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

(3)拒绝采样,所有随机生成问题的大锤解决方案:创建一个随机字符串并检查它是否与正则表达式匹配。如果没有,请再试一次。但是,如果正则表达式非常具体,则此解决方案的性能很差。

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

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

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

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

:返回一个常量字符串。

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

于 2013-07-08T12:15:15.023 回答
1

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

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

运行rex.exe如下:

rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here

有关此的更多信息:雷克斯指南

于 2013-07-08T09:17:27.067 回答
0

几乎可以肯定不是,不。

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

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

于 2013-07-08T09:07:12.963 回答