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

Wil*_*ger 27 java regex random data-generation

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

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

abc
abbbc
bac

等等

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

Wil*_*ger 17

我刚刚在一分钟前创建了一个库.它托管在这里: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);
Run Code Online (Sandbox Code Playgroud)


Ste*_*202 7

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

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

  2. 使用结果构建NFA.

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

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

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