zoukankan      html  css  js  c++  java
  • 10. Regular Expression Matching正则表达式

    Implement regular expression matching with support for '.' and '*'.

    '.' Matches any single character.
    '*' Matches zero or more of the preceding element.
    
    The matching should cover the entire input string (not partial).
    
    The function prototype should be:
    bool isMatch(const char *s, const char *p)
    
    Some examples:
    isMatch("aa","a") → false
    isMatch("aa","aa") → true
    isMatch("aaa","aa") → false
    isMatch("aa", "a*") → true
    isMatch("aa", ".*") → true
    isMatch("ab", ".*") → true
    isMatch("aab", "c*a*b") → true

    正则表达式,‘ . ’代表任意字符,‘ * ’跟在哪个字符后面,哪个字符就重复零次或多次。

    bool isMatch(const char *s, const char *p) 
    {   
        if (s == NULL || p == NULL) return false;      //s,p有其中一个为空,返回false。为空不包括‘’的情况
        if (*p == '') return *s == '';             //当p没有可匹配的字符,s必须为空
        if (*(p + 1) == '*')                           //当*(p+1)的第二个是‘*’
        {
            while ((*s != '' && *p == '.') || *s == *p)    
                                                       //此时匹配的是p为‘.*’,s可以为任意字符;或者p字符等于s字符
            {
                if (isMatch(s, p + 2)) return true;    //当*s=>'a',*p=>'.*a'或*s=>'a',p=>'b*a',直接让p=p+2,跳过'.*'或'b*'即*p='a'
                ++s;                                    //接着判断s的下一个字符
            }
            return isMatch(s, p + 2);
        }
        else if ((*s != '' && *p == '.') || *s == *p)  //当*(p+1)不等于‘*’
                                                         //两种情况:1、*p=='.',s可以为任意字符且不能为空。2、*s==*p
        {
            return isMatch(s + 1, p + 1);  
        }
        
        return false;
    }
     
  • 相关阅读:
    Nodejs exec和spawn的区别
    VC++每个版本对应的库
    在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
    window 控制台解决中文乱码
    NW.js 桌面应用程序
    C++ Addon Async 异步机制
    Node bak
    nodejs electron 创建桌面应用
    跨平台桌面程序框架Electron
    js post 下载文件
  • 原文地址:https://www.cnblogs.com/hozhangel/p/7797383.html
Copyright © 2011-2022 走看看