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

My last regular expression won't work but i cannot figure out the reason why

本文关键字:法弄 清楚 楚原 最后一个 正则表达式 不起作用 我的      更新时间:2023-10-16

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

输入字符串

.C/IATA

代码低于

std::string errorMessages [6][6] = {
    {
        "Correct Corparate Namen",
    },
    {
        "Incorrect Format for Corporate Namen",
    }
};
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---

但它仍然输出公司名称的错误格式

我不明白为什么它打印不正确,而它应该是正确的。有人能在这里帮我吗?

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

您需要扩展日志记录,并在调用boost::regex_match之前打印splitMaskst的相关部分,以仔细检查这些值是否为您所认为的值。用一些标点符号将它们括起来打印,并打印字符串长度以确定。

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