正则表达式匹配
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。
public class Solution {
/*
* str:待匹配字符串
* pattern:正则表达式字符串
*/
public boolean match(char[] str, char[] pattern)
{
int idx1=0,idx2=0;
return match(str,idx1,pattern,idx2);
}
private boolean match(char[] str, int idx1, char[] pattern, int idx2)
{
//匹配字符串和正则字符串都匹配完则成功匹配
if(idx1==str.length && idx2==pattern.length)
return true;
//如果正则表达式完了,但匹配表达式没完说明正则表达式不能完全匹配
//可能还有一种情况就是匹配表达式完了,正则没晚,这里没有考虑是因为可能还含有.*的后缀,
//如果不是可以省略的后缀则会在34行返回false
if(idx1!=str.length && idx2==pattern.length)
return false;
if(idx2<pattern.length-1 && pattern[idx2+1]=='*'){
if((idx1<str.length )&& (pattern[idx2]=='.' || pattern[idx2]==str[idx1]))
{
return match(str,idx1,pattern,idx2+2) ||
match(str,idx1+1,pattern,idx2) ||
match(str,idx1+1,pattern,idx2+2);
}else{
return match(str,idx1,pattern,idx2+2);
}
}else if((idx1<str.length) && (pattern[idx2]=='.' || pattern[idx2]==str[idx1])){
return match(str,idx1+1,pattern,idx2+1);
}
return false;
}
}
京公网安备 11010502036488号