欢迎来到可可资源网 免费分享实用的学习资源及技术教程  技术爱好者的栖息之地
✌可可资源网✌
当前位置:首页 > 易语言源码 > 正文

3种通配符匹配算法:完全匹配,局部匹配,高级匹配(模式匹配查找中能使用的通配符是)

编辑:可可日期:2022-02-16 17:36:26浏览:1.3w分类:易语言源码下载地址

修复了一个小概率可能出现的bug,

就是文本“123*456”和表达式“123*6”不匹配的问题,*当作普通字符匹配用掉了,大材小用了

然后增加了2种匹配方式算法,

之前的算是完全匹配,要整个文本完全匹配完才返回真

局部匹配:从任意中间地方匹配到一段就返回真

高级匹配:添加支持^和$(正则中的),限定开头和结尾。^和$没有转义支持,出现在表达式中间的话,一定会返回假

高级匹配也是局部匹配,但是前面+^,后面+$就等同于完全匹配了

#include <cstdio>bool IsFullMatch(const char* pStr, const char* pPattern) {  const char* pStarNext{},//星号后一位    * pStrNext{};//星号匹配完后一位  while (*pStr) {        if (*pPattern == '*') {pStarNext = ++pPattern;pStrNext = pStr;        } else if (*pPattern == '?' || *pPattern == *pStr) {++pStr;++pPattern;        } else if (pStarNext) {//只要行不通了,就把上次的*号多塞一个字符pPattern = pStarNext;pStr = ++pStrNext;        } else {return false;        }  }  while (*pPattern == '*')++pPattern;  return *pPattern == '\0';}bool IsSubMath(const char* pStr, const char* pPattern) {    const char* pStarNext{ pPattern },//星号后一位        * pStrNext{ pStr };//星号匹配完后一位    while (*pStr) {        if (*pPattern == '*') {pStarNext = ++pPattern;pStrNext = pStr;        } else if (*pPattern == '?' || *pPattern == *pStr) {++pStr;++pPattern;        } else if (*pPattern == '\0') {return true;        } else {//只要行不通了,就把上次的*号多塞一个字符pPattern = pStarNext;pStr = ++pStrNext;        }    }    while (*pPattern == '*')++pPattern;    return *pPattern == '\0';}bool IsAdvMath(const char* pStr, const char* pPattern) {//支持^?*$    const char* pStarNext{ pPattern },//星号后一位        * pStrNext{ pStr };//星号匹配完后一位    if (*pPattern == '^') {//限定前面完全匹配        ++pPattern;        pStarNext = pStrNext = nullptr;    }    while (*pStr) {        if (*pPattern == '*') {pStarNext = ++pPattern;pStrNext = pStr;        } else if (*pPattern == '?' || (*pPattern != '^' && *pPattern != '$' && *pPattern == *pStr)) {++pStr;++pPattern;        } else if (*pPattern == '\0') {return true;        } else if (pStarNext) {//只要行不通了,就把上次的*号多塞一个字符pPattern = pStarNext;pStr = ++pStrNext;        } else {return false;        }    }    while (*pPattern == '*')++pPattern;    if (*pPattern == '$')++pPattern;    return *pPattern == '\0';}int main() {  const char* arr[][2] = { {"hello","h*o"},{"123","?2?"},{"abababakfd","a*ba*kfd"},{"aaa","a?b"}};  for (auto& e : arr) {    printf("%d\n", IsFullMatch(e[0], e[1]));  }  getchar();}

引用模块

引用支持库

源码文件名支持库文件名支持库标识
通配符匹配.e系统核心支持库 5.7d09f2340818511d396f6aaf844c7e325
扩展界面支持库一 2.027bb20fdd3e145e4bee3db39ddd6e64c

下载地址

转载:感谢您对可可资源网网站平台的认可,以及对我们原创作品以及文章资源的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源可可资源网”。https://www.100keke.cn/2b29d1bbfb53.html