Собственно говоря код
const char *first = "фывфыв@NameOfElement(pupa i lupa)вфывфыв";
const char *last = first + strlen(first);
cmatch mr;
regex rx("@NameOfElement\((.*?)\)");
regex_search(first, last, mr, rx);
cout << mr.str();
Вывод выглядит так: @NameOfElement
насколько я понимаю регулярные выражения (а делаю я это плохо), то конструкция вида
(.*?)
это так называема capturing group, которая в моей регулярке соответствует тексту внутри скобок аннотации, могу ли я каким-либо образом выудить ее из результатов поиска?
Нужно использовать .str(1) объекта типа cmatch (или smatch):
const char *first = "фывфыв@NameOfElement(pupa i lupa)вфывфыв";
const char *last = first + strlen(first);
cmatch mr;
regex rx(R"(@NameOfElement\((.*?)\))");
regex_search(first, last, mr, rx);
cout << mr.str(1); // => pupa i lupa
См. демо онлайн.
Я использовал raw string literal, R"(@NameOfElement\((.*?)\))", это эквивалент "@NameOfElement\\((.*?)\\)". Кстати, лучше заменить .*? на [^)]* или [^()]* (=ноль и более символов, отличных от ) / ().
Сборка персонального компьютера от Artline: умный выбор для современных пользователей