给定RE,得出最大的子串匹配

时间:2009-07-01 05:45:09

标签: regex string theory

我正在寻找一些代码:

Given regular expression E, derive the longest string X
such that for every S, X is a substring of S iff S will match E

的示例:

E = "a", X = "a"
E = "^a$", X = "a"
E = "a(b|c)", X = "a"
E = "[ab]", X = ""

context:我想将一些正则表达式与数据匹配 只支持子字符串搜索的商店。这会很好 通过应用子字符串来优化正则表达式搜索 搜索数据存储以减少传输的数据量 尽可能多。

示例2:

如果我想抓住“错误foo”,“错误栏”,“错误baz”,我可能会指定

error: (foo|bar|baz)

并发送

search "error: "

到数据存储区,然后重新输入返回的项目。

谢谢!

2 个答案:

答案 0 :(得分:1)

一般而言,您可以尝试在所有非唯一((a | b),[ab])匹配中拆分正则表达式,然后在结果数组中查找最长的字符串。像

这样的东西
$foo = longest(regex_split($regex, '(\(.*?\|.*?\))|(\[.*?\])'));

答案 1 :(得分:1)

也许将RE转换为有限状态自动机并寻找需要出现在开始和结束状态之间的路径中的最长部分...使用图形的几何思考对您来说更容易,至少在我的情况下。