正则表达式regex
不管是做哪个开发,正则表达式 对我们都很重要,是不可缺的一个知识点,因为在匹配上能很高效的处理,正则表达式在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); }
转载请注明出处: 芝麻开花
本文的链接地址: http://www.vmould.cn/?post=183
您可能对以下文章感兴趣
发表评论 取消回复