Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 查找给定字符串与模式列表中的哪一个匹配_String_Data Structures_Language Agnostic_Pattern Matching_Wildcard - Fatal编程技术网

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

String 查找给定字符串与模式列表中的哪一个匹配,string,data-structures,language-agnostic,pattern-matching,wildcard,String,Data Structures,Language Agnostic,Pattern Matching,Wildcard,我有一组固定的未知模式字符串,它们使用通配符*和?(?=一个字符,*=零个或多个字符)。例如: “abcd?” “狗猫*” “*汽车” “你好*世界” 我想从这些模式中生成一些数据结构,它有一个名为findPattern的方法。该方法接受一个保证最多匹配一个模式的字符串,并返回该字符串匹配的模式(如果有) 在上述示例中: findPattern(“abcde”)返回“abcd?” findPattern(“hellocar”)返回“*car” findPattern(“edbca”)返回n

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

  • “abcd?”
  • “狗猫*”
  • “*汽车”
  • “你好*世界”
我想从这些模式中生成一些数据结构,它有一个名为
findPattern
的方法。该方法接受一个保证最多匹配一个模式的字符串,并返回该字符串匹配的模式(如果有)

在上述示例中:

  • findPattern(“abcde”)
    返回
    “abcd?”
  • findPattern(“hellocar”)
    返回
    “*car”
  • findPattern(“edbca”)
    返回
    null
诸如
“dogcatfrogcar”
之类的字符串保证不会作为此方法的输入提供

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

我如何做到这一点


另外,我是编程语言不可知论者。

Aho Corasic算法旨在发现文本中的多种模式。幸运的是,(单个符号),以及“如果通配符的数量以常数为界,则具有通配符的模式可以在线性时间内匹配”

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

在这种情况下,我发现了一些有趣的方法:

  • 允许同时匹配多个正则表达式(只要它们没有反向引用,这里就是这种情况)-请参阅
  • 和类Lex的词法分析器-参见

  • 我有点没时间详细阐述了,但您需要的是创建一个非确定性有限自动机。假设一个模式有n个字符,一个字符串有m个字符,你可以直接对你的字符串运行它,每个字符串的代价是O(n*m),或者将它转换成一个具有O(2^n)状态的确定性有限自动机,但匹配的代价是O(m)。是的,这似乎是正确的方向。你知道有实现类似功能的库吗?+1-这是一个好主意,但对于手头的问题来说太有限了。