现在的位置: 首页 > 综合 > 正文

MFC 下使用 GRETA

2013年08月07日 ⁄ 综合 ⁄ 共 1538字 ⁄ 字号 评论关闭

转载请注明出处: http://blog.csdn.net/jh_zzz/archive/2006/12/16/1445605.aspx

这几天抽空研究了一下 GRETA,网上的资料好像很少,只搜到一篇介绍如何在 VC6 中创建一个 Static Library ( http://www.nk975.com/sswater/zh/greta/index.htm ),官方网站也只有一个简单的文档说明,也没有使用的例子,不知道是因为使用的人太少还是怎么回事,对于很多像我这样没用过 C++ 的人来说,一开始可能还真不知道该怎么用。

下面将我在 MFC 中使用的代码:

匹配(match)

构造 rpattern 对象:
GLOBAL 参数设置匹配所有的字符串,否则将只匹配第一个

using namespace regex;
rpattern pat((LPCTSTR)m_Pattern, GLOBAL | ALLBACKREFS);

执行匹配操作:

 // Match a dollar sign followed by one or more digits,
 // optionally followed by a period and two more digits.
 // The double-escapes are necessary to satisfy the compiler.
 match_results results;
 match_results::backref_type br = pat.match((LPCTSTR)m_Text, results);

获取匹配结果

 match_results::backref_vector vec = results.all_backrefs();
 match_results::backref_vector::iterator iter;
 CString sMatchResult;
 for ( iter = vec.begin( ) ; iter != vec.end( ) ; iter++ )
 {
     CString sResultSub(iter->begin(), iter->end()-iter->begin());
     sMatchResult += sResultSub;
 }
   
 AfxMessageBox(sMatchResult );

替换(substitute):

 using namespace regex;
 
 rpattern pat((LPCTSTR)m_Pattern, (LPCTSTR)m_ReplaceWith, GLOBAL);

 subst_results results;

 std::basic_string<TCHAR> str((LPCTSTR)m_Text);
 pat.substitute(str, results);

 CString sReplaceResult = CString(str.begin(), str.length());
 AfxMessageBox(sReplaceResult );

拆分(split): 

using namespace regex;

 split_results sr;

 rpattern pat((LPCTSTR)m_Pattern);
 pat.split((LPCTSTR)m_Text, sr);

 split_results::iterator iter;

 CString sSplitResult;
 for ( iter = sr.begin() ; iter != sr.end(); iter++)
 {
   sSplitResult += CString(iter->begin(), iter->size());
   sSplitResult += _T("/r/n");
 }
 
 AfxMessageBox(sSplitResult );

 

抱歉!评论已关闭.