我想一次检查一个字符串对许多不同的正则表达式

时间:2012-03-06 11:38:22

标签: c++ regex loops

我有一个用户输入的字符串,我的数据库中有正则表达式,我可以检查数据库中正则表达式的输入字符串。

但是现在我需要在我的数据库中添加另一个列,它将保存另一个正则表达式,但是我想使用相同的for循环来检查输入字符串,而不是我的新正则表达式,但是在我的第一个循环结束时。但我想对同一个字符串

使用这个新表达式

即     \\D\\W\\D< - 第一个表达式
    \\d< - 第一个表达式结束后我要使用的第二个表达式

  1. 使用数据库中的正则表达式来处理
  2. 的输入字符串
  3. 在同一个循环中添加新的正则表达式和公司,并检查相同的字符串 - 而不是工作
  4. 我的代码如下

    std::string errorMessages [2][2] = {
        {
            "Correct .R\n",
        },
        {
            "Free text characters out of bounds\n",
        }
    };
    for(int i = 0; i < el.size(); i++)
    {
        if(el[i].substr(0,3) == ".R/")
        {
            DCS_LOG_DEBUG("--------------- Validating .R/ ---------------");
            output.push_back("\n--------------- Validating .R/ ---------------\n");
            str = el[i].substr(3);
            split(st,str,boost::is_any_of("/"));
            DCS_LOG_DEBUG("main loop done");
    
            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);
            }
            DCS_LOG_DEBUG("Out of the loop 2");
    
        }
    }
    

    如何从数据库中检索正则表达式,并在此循环完成后对同一个字符串使用此新正则表达式。

    STRING IS - shamari
    常规表达我想添加 - "\\d"

    如果你不明白,请问我任何问题

1 个答案:

答案 0 :(得分:0)

我不确定我完全理解你,但是如果你问“如何将两个单独的正则表达式组合成一个正则表达式”,那么你需要做

combinedRegex = "(?:" + firstRegex + ")|(?:" + secondRegex + ")"

如果你想要一个“或”比较(其中一个部分必须匹配)。

对于“和”比较,它有点复杂,取决于这些正则表达式是匹配整个字符串还是仅匹配子字符串。

请注意,如果第二个正则表达式使用带编号的反向引用,则这将无效,因为索引将更改:(\w+)\1(\d+)\1必须变为(?:(\w+)\1)|(?:(\d+)\2),例如。< / p>