正则表达式匹配

前端之家收集整理的这篇文章主要介绍了正则表达式匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


模式匹配

public class Solution {
 //(1)调用函数
    public boolean match(char[] str,char[] pattern)
    {

         return new String(str).matches(new String(pattern));
    }

//(2)[正规匹配方式]
public boolean match2(char[] str,char[] pattern) {
    if (str == null || pattern == null) {
        return false;
    }
    int strIndex = 0;
    int patternIndex = 0;
    return matchCore(str,strIndex,pattern,patternIndex);
}

public boolean matchCore(char[] str,int strIndex,char[] pattern,int patternIndex) {
    //有效性检验:str到尾,pattern到尾,匹配成功
    if (strIndex == str.length && patternIndex == pattern.length) {
        return true;
    }
    //pattern先到尾,匹配失败
    if (strIndex != str.length && patternIndex == pattern.length) {
        return false;
    }
    //模式第2个是*,且字符串第1个跟模式第1个匹配,分3种匹配模式;如不匹配,模式后移2位
    if (patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*') {
        if ((strIndex != str.length && pattern[patternIndex] == str[strIndex]) || (pattern[patternIndex] == '.' && strIndex != str.length)) {
            return matchCore(str,patternIndex + 2)//模式后移2,视为x*匹配0个字符
                    || matchCore(str,strIndex + 1,patternIndex + 2)//视为模式匹配1个字符
                    || matchCore(str,patternIndex);//*匹配1个,再匹配str中的下一个
        } else {
            return matchCore(str,patternIndex + 2);
        }
    }
    //模式第2个不是*,且字符串第1个跟模式第1个匹配,则都后移1位,否则直接返回false
    if ((strIndex != str.length && pattern[patternIndex] == str[strIndex]) || (pattern[patternIndex] == '.' && strIndex != str.length)) {
        return matchCore(str,patternIndex + 1);
    }
    return false;
    }


}
原文链接:https://www.f2er.com/regex/357485.html

猜你在找的正则表达式相关文章