如何从正则表达式生成与正则表达式匹配的文本?

2022-09-01 14:36:40

是的,你没看错。我需要一些能够从正则表达式生成随机文本的东西。因此,文本应该是随机的,但要与正则表达式匹配。它似乎不存在,但我可能是错的。

举个例子:该库将能够将''作为输入,并生成如下样本:[ab]*c

abc
abbbc
bac

等。

更新:我自己创造了一些东西:Xeger。http://code.google.com/p/xeger/ 退房。


答案 1

一分钟前,我刚刚创建了一个用于执行此操作的库。它托管在这里:http://code.google.com/p/xeger/。使用前请仔细阅读说明。(特别是那个指的是下载另一个必需的库。;-)

这是你使用它的方式:

String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
String result = generator.generate();
assert result.matches(regex);

答案 2

我不知道有这样的图书馆。如果您有兴趣自己编写一个,那么这些可能是您需要采取的步骤:

  1. 为正则表达式编写解析器(您可能希望从受限制的正则表达式类开始)。

  2. 使用结果构造 NFA

  3. (可选)将 NFA 转换为 DFA

  4. 随机遍历生成的自动机从开始状态到任何接受状态,同时存储每个转换输出的字符。

结果是一个被原始正则表达式接受的单词。有关更多信息,请参阅例如将正则表达式转换为确定性有限自动机