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

标签 c++ regex string vector boost-regex

我有两个 vector ,一个包含我的正则表达式,另一个包含将根据正则表达式检查其中的字符串,除了这个(如下所示)之外,大多数都工作正常,该字符串是正确的字符串并且匹配正则表达式,但它输出错误而不是正确。

输入字符串

.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}"<---

但它仍然输出Incorrect format for corporate name

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

最佳答案

您的正则表达式和周围的逻辑没问题。

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

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

关于c++ - 我的最后一个正则表达式不起作用,但我无法弄清楚原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376977/

相关文章:

c++ - 使用 std::vector<std::string> myString 时出错

c++ - qt/c++ 动态命名变量

c++ - Gtk应用程序的独特性,无需创建任何窗口

c++ - 重载 operator= 在模板类中

c++ - 为什么在使用 VS 2008 构建 DLL 时不遵循 "Use MFC in a Static Library"设置?

javascript - 如何以编程方式处理英文缩写 [Regex, JS, Ruby]

php - 正则表达式匹配特定符号 ' - "( ) * , . : … ; ?`

javascript - 从普通文本中提取标题标签

javascript - Angular2 ngModel : Why can it change an immutable string?

C 字符串与等号的比较