自动正则表达式构建器

时间:2009-05-21 22:00:32

标签: regex algorithm

我有N个字符串。 此外,有K正则表达式,我不知道。每个字符串要么匹配其中一个正则表达式,要么是垃圾。集合中总共有L个垃圾字符串。 K和L都不为人知。

我想推断出正则表达式。显然,这个问题有无穷无尽的解决方案。我需要找到一个“相当不错的解决方案”,

1)使K

最小化

2)最小化L

3)最大化正则表达式的“细节”。我不知道这个品质的正确用语是什么。例如,字符串“ab123”可以描述为/ ab \ d + /或/\w+.+/,但第一个正则表达式更“具体”。

所有3个要求都需要作为一个复合标准,具有一定的合理权重。

针对一种特定情况的解决方案:如果L = 0且K = 1(只有一个正则表达式,并且没有垃圾),那么我们可以找到字符串的LCS(最长公共子序列)并从中得出相应的正则表达式那里。但是,当我们有“噪音”(L> 0)时,这种方法不起作用。

非常感谢任何想法(或对现有工作的指示)。

3 个答案:

答案 0 :(得分:2)

您要做的是语言学习语言推断,而不是概括对一组给定的示例(你可能希望用一种小而强特定的语法来推断一种语言。

我不确定对此进行了多少研究。但是,如果您还想找到接受所有 n 字符串的minimal(= general)正则表达式,请在MDL(最小描述长度)和FSMs上搜索论文(有限状态机)。

Google Scholar处的两个有趣的问题:

答案 1 :(得分:1)

学术界的关键词是“语法推理”。不幸的是,没有任何有效的通用算法来做你提出的那种事情。你真正的问题是什么?

编辑:听起来您可能对数据描述语言感兴趣。 PADS(http://www.padsproj.org/)是一个典型的例子。

答案 2 :(得分:0)

这里没什么聪明的,也许我不完全理解这个问题?

为什么不总是将L减少到0?检查每个正则表达式的每个字符串;如果一个字符串与任何正则表达式都不匹配,那就是垃圾。如果匹配,请记住匹配的正则表达式/字符串,并在每个L = 0,K = 1上执行LCS以推断每个正则表达式的定义。