转载请注明出处: 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 );