使用/ begin / end锚点解决RegEx表达式问题

时间:2010-12-28 19:53:52

标签: c++ regex

我有一些使用CAtlRegExp执行某些验证的代码。在特定情况下,使用邮政编码(5或5-4格式)。另外,我希望数据准确,所以我使用锚点(^和$)。当我使用无锚表达式时,匹配调用成功。当我添加锚点时,匹配调用失败并显示完全相同的数据。

下面的代码就是我正在做的事情,代码中提供了失败案例的值。我承认不是一个正则表达式向导,但RegEx Buddy对格式表达式很满意,因为它在代码中。

任何帮助将不胜感激。如果我遗失了什么,请告诉我。

感谢。

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;
   }
}

1 个答案:

答案 0 :(得分:1)

编辑:当我发现问题时,完全改变了我的答案。

CAtlRegExp类不支持花括号{}中的重复计数;它使用那些来返回匹配对象。表达式中的54是必须匹配的文字字符。您正在测试的字符串中包含5,而4的部分是可选的,这只是巧合。这个表达式非常有效:

m_FormatExpression = "^\\d\\d\\d\\d\\d(-\\d\\d\\d\\d)?$";