【问题标题】:I want to check a string against many different regular expressions at once我想一次针对许多不同的正则表达式检查一个字符串
【发布时间】:2012-03-06 22:37:54
【问题描述】:

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

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


\\D\\W\\D \\d

  1. 对有效的输入字符串使用数据库中的正则表达式
  2. 在同一个循环中添加新的正则表达式和企业并检查同一个字符串 - 不起作用

我的代码如下

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");

    }
}

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

字符串是 - shamari
我想添加的正则表达式 - "\\d"

有不懂的可以问我

【问题讨论】:

  • 听起来您只是想添加更多代码...您只是尝试编写它吗?你的问题听起来像“我如何在我的代码中做不止一件事情?”
  • 是的,我需要添加更多代码,但如您所见,我使用循环遍历正则表达式和输入字符串,但我只想添加新的正则表达式,但结果显示用标题分隔它们

标签: c++ regex loops


【解决方案1】:

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

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

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

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

请注意,如果第二个正则表达式使用编号反向引用,这将不起作用,因为索引会更改:例如,(\w+)\1(\d+)\1 必须变为 (?:(\w+)\1)|(?:(\d+)\2)

【讨论】:

  • 是的,我基本上需要结合一个正则表达式 hm 是的,出于某种原因我没有想到:/ 谢谢@timpietzcker
  • @OP:请注意,“组合”涉及一个布尔运算符——在这种情况下是一个逻辑“或”。根据您的操作,您可能需要逻辑“和”。
  • @tenfour:谢谢你的意见;我已将此添加到我的答案中。
  • 只是为了以后参考,自动合并正则表达式实际上并非易事。我需要这个一次和wrote a library function for it。不幸的是,它在 PHP 中,但它仍然可以作为有用的参考。
猜你喜欢
  • 2010-09-16
  • 2013-12-21
  • 1970-01-01
  • 2019-03-03
  • 2023-03-07
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多