public boolean match(char[] str, char[] pattern)
{
if(str==null||pattern==null)
{
return false;
}
return matchcore(str,0,pattern,0);
}
public boolean matchcore(char[] str,int s,char[] pattern,int p)
{
if(s>=str.length&&p>=pattern.length)
{
return true;
}
if(s<str.length&&p>=pattern.length)
{
return false;
}
if(p+1<=pattern.length-1&&pattern[p+1]=='*')
{
//s<str.length避免無限遞歸
if(s<str.length&&(pattern[p]=='.'||pattern[p]==str[s]))
{
//這里不匹配是因為str可能為空串
return matchcore(str, s+1, pattern, p)||matchcore(str, s+1, pattern, p+2)||matchcore(str,s,pattern,p+2);
}
else{
return matchcore(str,s, pattern,p+2);
}
}
if(s<str.length&&(pattern[p]=='.'||pattern[p]==str[s]))
{
return matchcore(str,s+1,pattern,p+1);
}
return false;
}