我的最后一个正则表达式不起作用,但我无法弄清楚原因

时间:2012-02-21 11:41:51

标签: c++ regex string vector boost-regex

我有两个向量,一个用于保存我的正则表达式,另一个用于保存将在正则表达式中检查的字符串,其中大多数工作正常,除了这个(如下所示)字符串是正确的字符串和匹配正则表达式,但输出错误而不是正确。

INPUT STRING

.C/IATA

代码如下

std::string errorMessages [6][6] = {
    {
        "Correct Corparate Name\n",
    },
    {
        "Incorrect Format for Corporate Name\n",
    }
};

std::vector<std::string> el;
split(el,message,boost::is_any_of("\n"));
std::string a = ("");

for(int i = 0; i < el.size(); i++)
{
    if(el[i].substr(0,3) == ".C/")
    {
        DCS_LOG_DEBUG("--------------- Validating .C/ ---------------");
        output.push_back("\n--------------- Validating .C/ ---------------\n");
        str = el[i].substr(3);
        split(st,str,boost::is_any_of("/"));
        for (int split_id = 0 ; split_id < splitMask.size() ; split_id++ )
        {
            boost::regex const string_matcher_id(splitMask[split_id]);
            if(boost::regex_match(st[split_id],string_matcher_id))
            {
                a = errorMessages[0][split_id];
                DCS_LOG_DEBUG("" << a )
            }
            else
            {
                a = errorMessages[1][split_id];
                DCS_LOG_DEBUG("" << a)
            }
                output.push_back(a);
        }
    }
    else
    {
        DCS_LOG_DEBUG("Do Nothing");
    }

st [split_id] =“IATA”

splitMask [split_id] =“[a-zA-Z] {1,15}”&lt; ---

但它仍会输出公司名称

的格式不正确

我不明白为什么它打印错误,如果它应该是正确的,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你的正则表达式和周围的逻辑是正常的。

您需要延长日志记录并在调用splitMask之前打印stboost::regex_match的相关部分,以仔细检查这些值是否符合您的认定。用一些标点符号打印它们,并打印字符串长度以确定。

您可能知道,如果整个字符串匹配,boost::regex_match只会找到匹配项;因此,如果某处有不可打印的字符,或者可能是尾随空格字符,那么这将完美地解释您所看到的结果。