如何从正则表达式生成与正则表达式匹配的文本?
2022-09-01 14:36:40
是的,你没看错。我需要一些能够从正则表达式生成随机文本的东西。因此,文本应该是随机的,但要与正则表达式匹配。它似乎不存在,但我可能是错的。
举个例子:该库将能够将''作为输入,并生成如下样本:[ab]*c
abc
abbbc
bac
等。
更新:我自己创造了一些东西:Xeger。http://code.google.com/p/xeger/ 退房。
是的,你没看错。我需要一些能够从正则表达式生成随机文本的东西。因此,文本应该是随机的,但要与正则表达式匹配。它似乎不存在,但我可能是错的。
举个例子:该库将能够将''作为输入,并生成如下样本:[ab]*c
abc
abbbc
bac
等。
更新:我自己创造了一些东西:Xeger。http://code.google.com/p/xeger/ 退房。
一分钟前,我刚刚创建了一个用于执行此操作的库。它托管在这里: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);
我不知道有这样的图书馆。如果您有兴趣自己编写一个,那么这些可能是您需要采取的步骤:
为正则表达式编写解析器(您可能希望从受限制的正则表达式类开始)。
使用结果构造 NFA。
(可选)将 NFA 转换为 DFA。
随机遍历生成的自动机从开始状态到任何接受状态,同时存储每个转换输出的字符。
结果是一个被原始正则表达式接受的单词。有关更多信息,请参阅例如将正则表达式转换为确定性有限自动机。