Собственно говоря код
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\\((.*?)\\)"
. Кстати, лучше заменить .*?
на [^)]*
или [^()]*
(=ноль и более символов, отличных от )
/ (
).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
вот так выглядит все задание полностью - Основной поток создает два других потока приостановленными и после их создания запускает первыйПервый...
Почему эта программа не выдаёт ошибок для 1 и 2 строки, но выдаёт их для 3 и 4?