正则表达式“包含”另一个正则表达式

时间:2009-01-06 13:07:20

标签: regex

有没有办法测试正则表达式是否“包含”另一个正则表达式?
例如:

RegEX1 = "a.*b";
RegEx2 = "a1.*b";

RegEX1“包含”RegEX2。

据我所知 - 这不可能做到,我错了吗?

<小时/> 好的,joel.neely已经表明它可以在学术上完成(还没有读过......) 可以用编程语言来完成,比如说C#? 这会有效吗?测试1000对需要多长时间?

2 个答案:

答案 0 :(得分:6)

This paper包含对该主题的详细讨论(参见第4.4节)。

答案 1 :(得分:0)

将两个表达式转换为等效的状态机,并检查两台机器中的所有路径允许相同的匹配,应该这样做。显然应该注意抽水,因此避免重新访问旧节点。

它只适用于“简单”正则表达式(或者真实,你有什么,perls递归表达式更具表现力)。

虽然状态机的图形可能具有大量路径,但它仍然应该受到限制(特别是如果表达式的源是人类的话)。因此,您可以找到RegEX1的所有允许路径,并依次检查RegEX2中是否允许这些路径。如果所有路径都有效,则您知道该路径包含在另一路径中。