/**
* 正则表达式匹配
* <p>
* .表示任意一个字符
* *表示它前面的字符可以出现任意次
*
* @param s
* @param pattern
* @return
*/
public boolean match(String s, String pattern) {
if (null == s || null == pattern) return false;
if ("".equals(s) && "".equals(pattern)) return true;
return match(s, 0, pattern, 0);
}
private static boolean matchCore(String s, int s_index, String p, int p_index) {
//如果匹配字符和正则字符同时溢出,则返回
if (s_index >= s.length() && p_index >= p.length()) return true;
//遇到匹配的字符没有到末尾而正则已经到末尾,则返回
if (s_index < s.length() && p_index == p.length()) return false;
if (p_index + 1 < p.length() && p.charAt(p_index + 1) == '*') {
//表示s和p匹配,或者不匹配但是p是.,则进入
// 如s = a p = .* ,s =a p =a*
if (s_index < s.length() && (s.charAt(s_index) == p.charAt(p_index) || p.charAt(p_index) == '.')) {
//第一个表示*匹配了0个字符
//第二个表示匹配了1到n个字符
return match(s, s_index, p, p_index + 2) || match(s, s_index + 1, p, p_index);
}
//表示*前面的字符与s的字符不匹配,也表示*匹配了0个字符
//如s = a p = b*
return match(s, s_index, p, p_index + 2);
}
//表示s和p匹配,或者不匹配但是p是.,则进入
// 如s = a p = . ,s =a p =a
if (s_index < s.length() && (s.charAt(s_index) == p.charAt(p_index) || p.charAt(p_index) == '.')) {
return match(s, s_index + 1, p, p_index + 1);
}
//s和p不相等 s = a p = b
return false;
}