VC正则表达式的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC正则表达式的使用
2010年9月11日星期六邵盛松
正则表达式是一种对字符进行模糊匹配的一个公式。在数据有效性验证,查找,替换文本中都可以使用正则表达式。
本篇文章主要描述的是使用ATL中两个模板类CAtlRegExp和CAtlREMatchContext。
在使用CAtlRegExp类之前需要添加#include
RegExp是Regular Expression的缩写
以匹配邮件地址字符串为例说明两个类的使用
该示例更改自/en-us/library/k3zs4axe(VS.80).aspx CString strRegex=L"({[0-9_]+@[a-zA-Z0-9]+[.][a-zA-Z0-9]+[.]?[a-zA-Z0-9]+})";
CString strInput;
strInput=L"admin@";
CAtlRegExp
wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex;
REParseError status = reRule.Parse((const ATL::CAtlRegExp
if (REPARSE_ERROR_OK != status)
{
return 0;
}
CAtlREMatchContext
wt = (wchar_t *)(LPCTSTR)strInput;
if (!reRule.Match((const ATL::CAtlRegExp
{
AfxMessageBox(L"您输入的邮件地址不合法!");
}
else
{
for (UINT nGroupIndex = 0; nGroupIndex < mcRule.m_uNumGroups; ++nGroupIndex)
{
const CAtlREMatchContext<>::RECHAR* szStart = 0;
const CAtlREMatchContext<>::RECHAR* szEnd = 0;
mcRule.GetMatch(nGroupIndex, &szStart, &szEnd);
ptrdiff_t nLength = szEnd - szStart;
CString strEmailAddress(szStart, static_cast
if(pare(strInput)!=0)
{
CString strPrompt;
strPrompt.Format(L"您输入的邮件地址不合法,您要输入%s 吗!",strEmailAddress);
AfxMessageBox(strPrompt);
}
else
{
AfxMessageBox(L"输入的邮件地址正确!");
}
}
}
这两个模板类由另一个描述字符集特性的类参数化,可以是ASCII,WCHAR 或多字节。
可以将此忽略掉,因为根据设置的字符集,模板类自动生成具体的类。
在atlrx.h文件中供选择的有三个类
CAtlRECharTraitsA 用于ASCII
CAtlRECharTraitsW 用于UNICODE
CAtlRECharTraitsMB 用于多字节
在VC2005默认的字符集是使用Unicode字符集
根据正则的源码
#ifndef _UNICODE
typedef CAtlRECharTraitsA CAtlRECharTraits;
#else // _UNICODE
typedef CAtlRECharTraitsW CAtlRECharTraits;
#endif // !_UNICODE
所以构造CAtlRegExp类可以是
CAtlRegExp<> reRule;
REParseError status = reRule.Parse((const
ATL::CAtlRegExp
也可以是
CAtlRegExp
REParseError status = reRule.Parse((const
ATL::CAtlRegExp
通过调用CAtlRegExp的Parse()方法,使用正则表达式字符串作为参数,就可以
构造出一个我们所需要的类。
调用CATLRegExp的Match()函数
Match()函数参数说明
第一个参数是要对比的字符串,
第二个参数是存储match的结果
CAtlREMatchContext的成员变量m_uNumGroups表示匹配的Group
CAtlREMatchContext的GetMatch()函数返回匹配上的字符串的pStart和pEnd指
针
以下从MSDN摘录的正则表达语法
原文是/en-us/library/k3zs4axe(VS.80).aspx
Regular Expression Syntax
This table lists the metacharacters understood by CAtlRegExp.
Metacharacter Meaning
.Matches any single character.
[ ]Indicates a character class. Matches any character inside the brackets (for example, [abc] matches "a", "b", and "c").
^If this metacharacter occurs at the start of a character class, it negates the character class. A negated character class matches any character except those inside the brackets (for example, [^abc] matches all