首页 正则表达式regex

正则表达式regex

小白鼠 2019-04-24 11:56:35 5 2888

不管是做哪个开发,正则表达式 对我们都很重要,是不可缺的一个知识点,因为在匹配上能很高效的处理,正则表达式在C++11的版本上已经内置了(VS2010以后版本均可 添加头文件 使用),当然也可以使用第三方库;

为方便学习,我录制了视频:

链接:https://pan.baidu.com/s/1ruE8hncuKyvAMyIRlZ0GFQ 密码:

此处内容已隐藏,评论后刷新即可查看!

c++ 11 regex方式 代码参考


void CregexTestDlg::regex1(){
	CString regexStr,checkStr;
	GetDlgItem(IDC_EDIT1)->GetWindowText(regexStr);
	GetDlgItem(IDC_EDIT2)->GetWindowText(checkStr);
	// text
	string str(CW2A(checkStr.GetString()));
	
	smatch result;
	
	// declare
	regex pattern(CW2A(regexStr.GetString()));

	// find and match
	//迭代器声明
	string::const_iterator iterStart = str.begin();
	string::const_iterator iterEnd = str.end();

	CString resultStr;
	// result
	//注意  regex_match 与 regex_search 函数的区别
	//match是全文匹配,即要求整个字符串符合匹配规则。
	//regex_search(str,result, pattern);----获得匹配的值为  result[]与result.str()
	//search是搜索匹配,即搜索字符串中存在符合规则的子字符串。
	//regex_replace 是替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串。
	//regex_replace(str, pattern, "Hi")
	//还有可以用来调整字符串内容(缩短、顺序等)----这里不做介绍
	while( regex_search(iterStart, iterEnd, result, pattern))
	{
		if (resultStr.IsEmpty())
		{
			resultStr=_T("匹配成功:\r\n");
		}
		string temp = result[0];
		
		resultStr+=(CString)temp.c_str();
		resultStr+=_T("\r\n");
		// get next
		iterStart = result[0].second;	//更新搜索起始位置,搜索剩下的字符串

	}
	if (resultStr.IsEmpty())
	{
		resultStr=_T("匹配失败!\r\n");
	}
	GetDlgItem(IDC_EDIT3)->SetWindowText(resultStr);
}


第三方库deelx 代码参考


void CregexTestDlg::regex2(){
	CString regexStr,checkStr;
	GetDlgItem(IDC_EDIT1)->GetWindowText(regexStr);
	GetDlgItem(IDC_EDIT2)->GetWindowText(checkStr);
	// text
	//char  *text(CW2A(checkStr.GetString()));
	char  *text=new char[checkStr.GetLength()+1] ;
	strcpy(text,CW2A(checkStr.GetString()));
	//
	//char  *declare=new char[regexStr.GetLength()+1] ;
	//strcpy(declare,CW2A(regexStr.GetString()));
	// declare
	//static CRegexpT <char> regexp(declare);
	static CRegexpT <char> regexp(CW2A(regexStr.GetString()));

	// find and match
	MatchResult result = regexp.Match(text);
	CString resultStr;
	// result
	while( result.IsMatched() )
	{
		if (resultStr.IsEmpty())
		{
			resultStr=_T("匹配成功:\r\n");
		}
		CString tempStr=checkStr.Mid(result.GetStart(),result.GetEnd() - result.GetStart());
		resultStr+=tempStr;
		resultStr+=_T("\r\n");
		// get next
		result = regexp.Match(text, result.GetEnd());

	}
	if (resultStr.IsEmpty())
	{
		resultStr=_T("匹配失败!\r\n");
	}
	GetDlgItem(IDC_EDIT3)->SetWindowText(resultStr);
}


发表评论

评论列表:

匿名
2020-05-19 14:22
谢谢分享,学习
匿名
2020-03-30 17:37
谢谢分享,学习!!!!!!!
2019-08-19 08:46
感谢大神分享1212
匿名
2019-05-23 15:58
感谢大神分享
匿名
2019-04-25 01:39
[blockquote]签到成功!签到时间:上午1:39:09,每日打卡,生活更精彩哦~[/blockquote]