我需要在数据集中检测一个灵活的模式。例如,模式如下:

0{1},1{*},0{1}
(the number between { and } is how many times a number may occur)

这将匹配:
0,1,0
0,1,1,1,1,1,0

上面一个仍然很容易,下面是一个更困难的问题:
0{1},( 1{*} | 1{*},2{1},1{*} ),0{1}
(the | pipe character is a "or")

这将匹配:
0,1,0
0,1,1,1,1,1,0
0,1,2,1,0
0,1,1,1,1,1,2,1,0

我发现很难理解如何检测这些灵活的模式。
我的第一个想法是生成某种类型的决策树,但是当模式变得更加复杂时,这将成为一个相当困难的任务,特别是因为您不必在这样的树中后退,并标记路径为“不工作”,然后尝试另一种路径。
也许有更好的办法解决这类问题吗?
[编辑]哦,我的问题可能过于简单化了,在我的例子中,0,1,2这个小数字不是数字,而是具有许多属性的对象。我的模式定义将匹配这些对象属性的一个或一个组合。

最佳答案

听起来你在说建立一个正则表达式匹配器每个正则表达式都可以表示为DFA这里有一个解释how的链接。

10-01 06:52
查看更多