VC正则表达式的使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 reRule;

wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex;

REParseError status = reRule.Parse((const ATL::CAtlRegExp::RECHAR *)wt);

if (REPARSE_ERROR_OK != status)

{

return 0;

}

CAtlREMatchContext mcRule;

wt = (wchar_t *)(LPCTSTR)strInput;

if (!reRule.Match((const ATL::CAtlRegExp::RECHAR *)wt,&mcRule))

{

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(nLength));

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::RECHAR *)wt);

也可以是

CAtlRegExp reRule;

REParseError status = reRule.Parse((const

ATL::CAtlRegExp::RECHAR *)wt);

通过调用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

相关文档
最新文档