2015-05-09 42 views
-1

任何人都有一个想法,如何实现算法查找字符串是否匹配特定模式?(不包含它!)不使用正则表达式...算法,如果给定的字符串匹配给定的模式返回true

规则是,模式可以持有标志像?或*:
? =一个字符或数字
* =多个字符或根本

例如数或非:

isMatching( “?? AB”, “CBAB”)返回true。
isMatching(“* a?Ab”,“123cacAbAAb”)返回false。
isMatching(“* a?Ab”,“123aaAb”)返回true。
isMatching(“* a?Ab”,“007aaabAb”)返回true。

isMatching(“a?D *”,“arD1324687e”)返回true。

+0

怎么看待正则表达式的幕后工作,并建立自己的实现。 –

+0

还有一个问题:'(“*?Ab,”cbAb“)'return? –

+0

@SashaSalauyou:在我看来它是等于写作”?? Ab“在这种情况下 – JavaSa

回答

1

某些类型的递归的也非常简单:

def match(pattern, str): 
    return match_(pattern, str) 

def match_(pattern, str) 
    if len(pattern) == 0 and len(str) == 0: 
     return True 

    switch pattern[0]: 
     case '?': 
      match_(pattern[1: ], str[1: ]) 
     case '*': 
      return match_(pattern, str[1: ]) or match_(pattern[1: ], str[1: ]) or match_(pattern[1: ], str) 
     default: 
      return pattern[0] == str[0] and match_(pattern[1: ], str[1: ]) 
+0

您能解释更多'pattern [1:]'语法的含义,为什么不在迭代方法中这样做? – JavaSa

+0

噢,它只是一些从Python&C中伪装起来的伪代码。这里x [1:]表示由x的第二个字符和前面的字符组成的子字符串。为了提高效率,您可以传递字符串和它们的索引,而不是实际构建这些子字符串) - 我只是编写伪代码另外,在递归或迭代中没有任何内在原因 - 无论适用于您。 –

相关问题