功能非常简单,只是检查 text 的前缀是否与 reg_exp 匹配,并不去检查 text 中间是否有与 reg_exp 匹配的子串。
纯递归实现
import sys
def match_star(c, reg_exp, text):
while True:
if match_here(reg_exp, text):
return True
if len(text) > 0 and (c == text[0] or c == '.'):
text = text[1:]
else:
break
return False
def match_here(reg_exp, text):
if len(reg_exp) == 0:
return True
if len(reg_exp) > 1 and reg_exp[1] == '*':
return match_star(reg_exp[0], reg_exp[2:], text)
if reg_exp[0] == '$':
return len(text) == 0
if reg_exp[0] == '.' and len(text) > 0:
return match_here(reg_exp[1:], text[1:])
if reg_exp[0] == text[0] and len(text) > 0:
return match_here(reg_exp[1:], text[1:])
return False
if __name__ == '__main__':
reg_exp = sys.argv[1]
text = sys.argv[2]
print(match_here(reg_exp, text))