首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的最后一个正则表达式不能工作,但我不知道为什么

我的最后一个正则表达式不能工作,但我不知道为什么
EN

Stack Overflow用户
提问于 2012-02-21 11:41:51
回答 1查看 221关注 0票数 1

我有两个向量,一个保存我的正则表达式,另一个保存将根据正则表达式检查的字符串,其中大多数都很好,除了这个(如下所示),字符串是一个正确的字符串,与正则表达式匹配,但它输出的是不正确的,而不是正确的。

输入字符串

代码语言:javascript
复制
.C/IATA

代码在下面

代码语言:javascript
复制
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");
    }

stsplit_id = "IATA"

splitMasksplit_id =“a{1,15}”<--

但是它仍然输出不正确的公司名称格式。

我不明白为什么它打印不正确,当它应该是正确的,谁能帮助我这里吗?

EN

回答 1

Stack Overflow用户

发布于 2012-03-18 21:13:14

您的正则表达式和周围的逻辑是可以的。

您需要扩展日志记录,并在调用splitMaskst之前打印boost::regex_matchst的相关部分,以反复检查这些值是否符合您所认为的值。用标点符号包围它们,并打印字符串长度以确保。

您可能知道,只有当整个字符串是匹配时,boost::regex_match才能找到匹配;因此,如果某个地方有一个不可打印的字符,或者可能有一个尾随空格字符,这将很好地解释您所看到的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9376977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档