Я хочу проверить строку по множеству различных регулярных выражений одновременно - PullRequest
0 голосов
/ 06 марта 2012

У меня есть строка, которую пользователь ввел, и у меня есть мои регулярные выражения в моей базе данных, и я могу проверить входную строку по этим регулярным выражениям в пределах базы данных.

Но теперь мне нужно добавить еще один столбец в моей базе данных, который будет содержать другое регулярное выражение, но я хочу использовать тот же цикл for, чтобы проверить входную строку снова в моем новом регулярном выражении, а также в конце моего первого цикла. Но я хочу использовать это новое выражение для той же строки

т.е.
\\D\\W\\D <- первое выражение <br> \\d <- второе выражение, которое я хочу использовать после того, как первое выражение закончится </p>

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

    }
}

Как я могу извлечь свое регулярное выражение из базы данных, и после завершения этого цикла использовать это новое регулярное выражение для той же строки.

STRING IS - shamari
регулярное выражение, которое я хочу добавить - "\\d"

задавайте мне любые вопросы, если вы не понимаете

1 Ответ

0 голосов
/ 06 марта 2012

Я не уверен, что полностью вас понимаю, но если вы спрашиваете "Как мне объединить два отдельных регулярных выражения в одно регулярное выражение", то вам нужно сделать

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

, если вы хотитесравнение "или" (любая из частей должна совпадать).

Для сравнения "и" это немного сложнее, в зависимости от того, соответствуют ли эти регулярные выражения всей строке или только подстроке.

Имейте в виду, что если второе регулярное выражение использует нумерованные обратные ссылки, это не сработает, так как индексы изменятся: (\w+)\1 и (\d+)\1 должны стать, например, (?:(\w+)\1)|(?:(\d+)\2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...