我想检测一系列动作偏离给定模式的段落,并且无法找出一个聪明的解决方案来做到这一点,尽管问题听起来很简单。
该模式的目的是描述某种正常的序列。更具体:“动作序列中应该或不应该包含哪些动作以及以什么顺序?” 然后我想将动作序列与模式匹配并检测偏差及其位置。
我的第一种方法是使用正则表达式来做到这一点。这是一个例子:
Example 1:
Pattern: A.*BC
Sequence: AGDBC (matches)
Sequence: AGEDC (does not match)
Example 2:
Pattern: ABCD
Sequence: ABD (does not match)
Sequence: ABED (does not match)
Sequence: ABCED (does not match)
Example 3:
Pattern: ABCDEF
Sequence: ABXDXF (does not match)
使用正则表达式很容易检测到错误,但检测不到错误发生的位置。我的方法是连续删除最后一个正则表达式块,直到我可以在序列中找到模式。然后我会知道最后正确的动作,并且至少找到了第一个偏差。但这对我来说似乎不是最好的解决方案。此外我不能所有的偏差。
我心中的其他想法是使用状态机,像 ANTLR 这样的命令工具。但我不知道他们是否能解决我的问题。我想检测遗漏和委托错误,并让用户有可能创建自己的模式。你知道这样做的好方法吗?