查找给定字符串匹配模式列表中的哪一个

时间:2013-07-14 17:38:46

标签: string data-structures language-agnostic pattern-matching wildcard

我有一组固定的未知模式字符串,它使用通配符*?? =一个字符,* =零个或多个字符)。例如:

  • "abcd?"
  • "dogcat*"
  • "*car"
  • "hello*world"

我想从这些模式中生成一些数据结构,它有一个名为findPattern的方法。该方法接受一个字符串,该字符串保证最多匹配其中一个模式,并返回字符串匹配的模式(如果有)。

在上面的例子中:

  • findPattern("abcde")返回"abcd?"
  • findPattern("hellocar")返回"*car"
  • findPattern("edbca")返回null

保证"dogcatfrogcar"之类的字符串不会作为此方法的输入。

构建数据结构可能很慢,因为模式集只给出一次。该函数将在同一模式集上为许多字符串调用,因此需要高效。

我如何实现这一目标?

P.S。我是编程语言不可知论者

2 个答案:

答案 0 :(得分:1)

Aho-Corasic算法旨在在文本中找到多个模式。幸运的是,it is possible to work with '?' wildcards(单个符号)和"如果通配符的数量受常量限制,带有通配符的模式可以在线性时间内匹配"

答案 1 :(得分:0)

我们可以用正则表达式替换每个模式,并尝试解决更普遍的问题。

在那种情况下,我找到了有趣的方法:

  1. RE2 library,它允许同时匹配多个正则表达式(只要它们没有后向引用,这就是这种情况) - 请参阅this answer
  2. Lex和类似Lex的词法分析器 - 请参阅this answer