带’*’号字符串的匹配
目标:
判断源字符串中是否含有指定子串,子串可能会有*号通配符。
初步测试没问题。记录下来。后面要是有问题再来纠正。
#include <string>
using namespace std; // 带*号通配符的字符串匹配,'*'代表任意字符串,包括空字符串
bool WildcardCaptureA(const char* lpszSour, const char* lpszMatch)
{
bool lbRet = false;
do
{
const char* lpszSrcStr = lpszSour;
const char* lpszMatchStr = lpszMatch; // 不用比较的条件
if(NULL == lpszSrcStr || 0 == lpszSrcStr[0]
|| NULL == lpszMatchStr || 0 == lpszMatchStr[0])
break; // 排除首部的*号
while('*' == lpszMatchStr[0])++lpszMatchStr;
if(0 == lpszMatchStr[0]) // 全是*号,则认为任何字符串都匹配
{
lbRet = true;
break;
} string loStrWord;
// 取出第一个子串
while('*' != lpszMatchStr[0] && 0 != lpszMatchStr[0])
{
loStrWord.push_back(lpszMatchStr[0]);
++lpszMatchStr;
} // 匹配
lpszSrcStr = strstr(lpszSrcStr, loStrWord.c_str());
if(NULL == lpszSrcStr)
break; // 继续匹配
if(0 != lpszMatchStr[0] && false == WildcardCaptureA(++lpszSrcStr, lpszMatchStr))
break; lbRet = true;
} while (false);
return lbRet;
} // 带*号通配符的字符串匹配,'*'代表任意字符串,包括空字符串
bool WildcardCaptureW(const wchar_t* lpszSour, const wchar_t* lpszMatch)
{
bool lbRet = false;
do
{
const wchar_t* lpszSrcStr = lpszSour;
const wchar_t* lpszMatchStr = lpszMatch; // 不用比较的条件
if(NULL == lpszSrcStr || 0 == lpszSrcStr[0]
|| NULL == lpszMatchStr || 0 == lpszMatchStr[0])
break; // 排除首部的*号
while('*' == lpszMatchStr[0])++lpszMatchStr;
if(0 == lpszMatchStr[0]) // 全是*号,则认为任何字符串都匹配
{
lbRet = true;
break;
} wstring loStrWord;
// 取出第一个子串
while('*' != lpszMatchStr[0] && 0 != lpszMatchStr[0])
{
loStrWord.push_back(lpszMatchStr[0]);
++lpszMatchStr;
} // 匹配
lpszSrcStr = wcsstr(lpszSrcStr, loStrWord.c_str());
if(NULL == lpszSrcStr)
break; // 继续匹配
if(0 != lpszMatchStr[0] && false == WildcardCaptureW(++lpszSrcStr, lpszMatchStr))
break; lbRet = true;
} while (false);
return lbRet;
}
带’*’号字符串的匹配的更多相关文章
- (转)MySQL数据表中带LIKE的字符匹配查询
MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56 百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...
- Delphi 自带的字符串分割函数split
下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...
- js获取带#号链接后的参数
现在许多的主流网站都将'#'大规模用于重要URL中,我们通过正则表达式和window.location.search获取参数已经行不通了. 一.'#'号是什么 1.#代表网页中的一个位置.其后面的字符 ...
- url带#号,微信支付那些坑
现在前端很多框架的前端路由都带#号,主要为了做到无刷新跳转页面. 在微信公众号做微信支付时,配置的支付路径比如是http://www.eee.com/#/order,在调微信支付的方法时错误信息是'U ...
- Oracle添加数据报文字与格式字符串不匹配错误
今天在学习Oracle时碰到一个错:文字与格式字符串不匹配. 我在Oracle数据库中创建了一张表: --创建员工表employee create table employee ( empon ) n ...
- oracle文字与格式字符串不匹配的解决
oracle文字与格式字符串不匹配的解决 oracle的日期时间类型 在往oracle的date类型插入数据的时候,记得要用to_date()方法. 如insert into CUSLOGS(STAR ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- java.sql.SQLException:ORA-01861:文字和格式字符串不匹配
1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...
- 异常-----java.sql.SQLException:ORA-01861:文字和格式字符串不匹配
1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...
随机推荐
- nginx+keepalived实现nginx双主高可用的负载均衡
http://kling.blog.51cto.com/3320545/1253474 一.前言: 在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作.提供稳定可靠的服务,可以给用户带 ...
- 更改Zend Studio/Eclipse代码风格主题
最近决定把几个IDE的代码样式统一一下,Visual Studio的还算好改,PHP目前用得不多,不过也打算给Zend Studio换身新装. 网上搜索的一些更改Zend Studio主题的多是修改或 ...
- cocos2d 高仿doodle jump 无源代码
1. 游戏视频 主角眼熟吗?没错,上次跑酷游戏中的"30"来Jump了,有三种道具.主角光环,竹蜻蜓.翅膀: 有两种怪物,螃蟹和鸟: 有5种板子.点击屏幕,30会把它的嘴巴3给发射 ...
- mac下的home键、end键以及insert键的替代
最近用android模拟器模拟东西,发现模拟器的home快捷键是键盘上的home键,这让我在windows下很好找,换到mac下找了老半天也没找到,后来才查到是有替代键的,放到这里做备份 home键f ...
- Java基础知识强化之集合框架笔记02:集合的继承体系图解
1. 集合的继承体系图解:
- LSI MegaCli 命令使用4
Dell服务器常用管理命令总结准备新版本的 MegaCli-1.01.24-0.i386.rpm 会把程序安装在/opt下,可以自定义安装目录,例如:rpm --relocate /opt/=/usr ...
- mysql explain 命令解释
转载http://bzyyc.happy.blog.163.com/blog/static/6143064720115102551554/ key实 际使用的索引.如果为NULL,则没有使用索引.很少 ...
- (转)委托的N种写法,你喜欢哪种?
原文:http://www.cnblogs.com/FreeDong/archive/2013/07/31/3227638.html 一.委托调用方式 1. 最原始版本: delegate strin ...
- C++ for 循环
C++的另一种for循环写法,和C#的foreach语法很类似,不需要知道数组的类型: C++:for(auto& item:items) C#:foreach(var item in ite ...
- apache_fileupload实现文件上传_上传多个文件
1.导包 核心类: DiskFileItemFactory – 设置磁盘空间,保存临时文件.只是一个具类. ServletFileUpload - 文件上传的核心类,此类接收request,并解析r ...