我有一些使用CAtlRegExp执行一些验证的代码。在特定情况下,邮政编码(5或5-4格式)。此外,我希望数据就是这样,所以我使用锚点(^和$)。当我使用无锚点表达式时,匹配调用成功。当我添加锚点时,使用完全相同的数据匹配调用失败。
下面的代码就是我正在做的事情,在代码中为失败的情况提供了值。我承认我不是一个正则表达式向导,但是RegEx伙伴对它在代码中的格式表达式很满意。
任何帮助都将不胜感激。如果我遗漏了什么,请告诉我。
谢谢。
sData = "12345-1234";
m_FormatExpression = "^(\\d{5})(-(\\d{4}))?$";
CAtlRegExp<> regex;
REParseError status = regex.Parse( m_FormatExpression );
if( REPARSE_ERROR_OK == status )
{
CAtlREMatchContext<> match;
if( regex.Match( sData, &match ) )
{
result = true;
}
}
发布于 2010-12-29 07:12:12
编辑:当我弄清楚这个问题时,完全改变了我的答案。
CAtlRegExp类不支持大括号{}
中的重复计数;它使用这些重复计数来返回匹配对象。表达式中的5
和4
是必须匹配的文字字符。只是巧合的是,您正在测试的字符串中有一个5
,而带有4
的部分是可选的。这个表达式可以完美地工作:
m_FormatExpression = "^\\d\\d\\d\\d\\d(-\\d\\d\\d\\d)?$";
https://stackoverflow.com/questions/4549004
复制相似问题