Можно ли посчитать количество групп захвата в произвольном объекте std :: regex? - PullRequest
0 голосов
/ 11 января 2019

Для произвольного std::regex возможно ли узнать количество групп захвата в нем?

Предположим, что результат будет возвращен функцией CountCaptures(). Вот что я хотел бы получить:

std::regex r1("(a)bc");
int i = CountCaptures(r1); // returns 1
std::regex r2("(a)(b)c");
int j = CountCaptures(r2); // returns 2
std::regex r3("abc");
int k = CountCaptures(r3); // returns 0

Я знаю, что это возможно с std::smatch после сопоставления строки, но дело в том, что я получаю регулярное выражение от пользователя, и мне нужно ограничить группы захвата определенным образом перед сопоставлением любые строки.

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать std::basic_regex::mark_count().

Пример использования

std::regex r1{"abcde"};
std::cout << "r1 has " << r1.mark_count() << " capture groups" <<  '\n';

std::regex r2{"ab(c)de"};
std::cout << "r2 has " << r2.mark_count() << " capture groups" << '\n';

std::regex r3{"abc(de(fg))"};
std::cout << "r3 has " << r3.mark_count() << " capture groups" << '\n';

Выход:

r1 has 0 capture groups
r2 has 1 capture groups
r3 has 2 capture groups
...