美文网首页
正则表达式匹配

正则表达式匹配

作者: _RO_CKY_ | 来源:发表于2018-11-15 16:54 被阅读14次

10.正则表达式匹配

要求:给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。

  • '.' 匹配任意单个字符。
  • '*' 匹配零个或多个前面的元素

示例:

输入:
s = "mississippi"
p = "mis*is*p*."
输出: false

代码思路: 遍历模式串,查询s串是否能与p串匹配上。

  public boolean isMatch(String s, String p) {
         //两串的长度
         int sLen = s.length();
         int pLen = p.length();
         //s串的当前检索位置,(这里通过s串是否满足p串作匹配)。
         int currentIndex = 0;
         //遍历p串
         for (int i = 0; i < pLen; i++) {
             char c = p.charAt(i);
             //.号
             if (c == '.') {
                 //后一个是 "*"
                 if (i + 1 < pLen && p.charAt(i + 1) == '*') {
                     //不做处理,交由后面*字符处理
                 }
                 //匹配任意
                 else {
                     if (currentIndex < sLen) {
                         //任意匹配
                         currentIndex++;
                     } else {
                         //匹配失败
                         return false;
                     }
                 }
             }
             //匹配“*”
             else if (c == '*') {
                 if (i - 1 >= 0) {
                     //获取前一个字符
                     char last = p.charAt(i - 1);
                     //一个都没有就跳过及匹配0个last字符
                     if (currentIndex < sLen && s.charAt(currentIndex) != last && last!='.') {
                         //继续匹配,不做处理
                     } else {
                         if (i + 1 < pLen) {
                             //"*"后面还有字符
                             String temp_p = p.substring(i + 1);
                             //按照匹配个数为0,1,2,3的情况下,检测后面对应的两个字串能后匹配上
                             for (int j = currentIndex; j <= sLen; j++) {
                                 String temp_s = s.substring(j);
                                 if(j==currentIndex || last=='.' || last==s.charAt(j-1)){
                                     if (isMatch(temp_s, temp_p)) {
                                         return true;
                                     }
                                 }
                                 else{
                                     break;
                                 }
                             }
                             return false;
                         } else {
                             //“*”后面没有字符
                             //前一个是"."
                             if(last=='.'){
                                 //可以任意匹配,匹配总是成功
                                 return true;
                             }
                             //前一个是其他,逐个匹配
                             while(currentIndex<sLen && s.charAt(currentIndex)==last){
                                 currentIndex++;
                             }
                         }
                     }
                 }
             } else {
                 //普通字符
                 if (i + 1 < pLen && p.charAt(i + 1) == '*') {
                     //后面是*,交由后面处理
                     continue;
                 }
                 //普通匹配
                 if (currentIndex < sLen && c == s.charAt(currentIndex)) {
                     currentIndex++;
                 } else {
                     //匹配失败
                     return false;
                 }
             }
         }
         //成功匹配
         if (currentIndex >= sLen) {
             return true;
         }
         //匹配失败
         else {
             return false;
         }
     }

相关文章

  • Nginx 匹配规则

    无 :默认匹配,普通匹配 = :精确匹配 ~* :匹配正则表达式,不区分大小写 ~ :匹配正则表达式,区分大小写 ...

  • 2019.8.15分享:正则表达式字符匹配攻略

    一、正则表达式 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 这次分享主要将提下正则表达式字符匹配 • 两种...

  • python与正则表达式 2020-01-02(未经允许,禁止转

    正则表达式 正则表达式与程序语言无关。正则表达式做匹配实际上就做3件事:【字符匹配】+【次数匹配】+【逻辑匹配】下...

  • 《javaScript正则表达式迷你书》(一)

    正则表达式字符匹配攻略 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 两种模糊匹配 如果正则只有精确匹配是没...

  • 正则加^$与不加的区别

    加^$的正则表达式,表示完整匹配。 正则表达式匹配内容匹配结果说明/bc/abcdefg成功包含就能匹配成功/^a...

  • 正则表达式收集

    常用正则表达式大全 常用正则表达式大全!(例如:匹配中文、匹配html) 匹配中文字符的正则表达式:[u4e00-...

  • 正则表达式位置匹配攻略

    来源:正则表达式位置匹配攻略作者:老姚(转载已获得作者授权) 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 ...

  • 正则表达式字符匹配攻略

    来源:正则表达式字符匹配攻略作者:老姚(转载已获得作者授权) 正则表达式是匹配模式,要么匹配字符,要么匹配位置。请...

  • 5: 正则表达式 + 三剑客之grep

    3 正则表达式 正则表达式元字符分类: 字符匹配 次数匹配 位置锚定 分组 基本正则表达式: vim, grep,...

  • 常用正则表达式

    常用正则表达式大全!(例如:匹配中文、匹配html)目录导航一、常见正则表达式二、正则表达式应用一、常见正则表达式...

网友评论

      本文标题:正则表达式匹配

      本文链接:https://www.haomeiwen.com/subject/banyfqtx.html