так скажем, у меня есть основная функция с некоторым произвольным кодом:использования станда :: регулярное выражение, чтобы найти содержание функции
void main(){
//Some random code
int a = 5;
int b = a + 7;
}
и текстом этой функции хранится внутри станд :: строка:
std::string mystring("void main(){ //Some random code int a = 5; int b = a + 7;}");
Я хочу использовать std :: regex, чтобы извлечь тело функции. Таким образом, в результате я буду получать обратно:
"//Some random code int a= 5; int b = a + 7;"
Мой вопрос я не знаю, как форматировать регулярное выражение, чтобы получить то, что я хочу. Вот мой код, который у меня есть прямо сейчас:
std::string text("void main(){ //Some random code int a = 5; int b = a + 7;}");
std::regex expr ("void main()\\{(.*?)\\}");
std::smatch matches;
if (std::regex_match(text, matches, expr)) {
for (int i = 1; i < matches.size(); i++) {
std::string match (matches[i].first, matches[i].second);
std::cout << "matches[" << i << "] = " << match << std::endl;
}
}
Мое регулярное выражение полностью выключено и не возвращает совпадений. Что мне нужно для создания моего регулярного выражения, чтобы это работало?
Не связано с вашей (текущей) проблемой, но с использованием регулярных выражений, чтобы попробовать синтаксический анализ кода C или C++, будет сложно, поскольку регулярные выражения не могут справиться с вложенными структурами. Для чего-то простого, как ваш пример, он будет работать, но как только вы смешаетесь с вложенными фигурными скобками, вы больше не сможете надежно использовать регулярные выражения. –
Я вижу - поэтому функция «main» может иметь любое количество вложенных операторов if/else, в то время как циклы и т. Д. ... в этом случае regex не будет работать? Если нет, то каков был бы лучший способ получить данные? Я не привязан к использованию регулярного выражения, я просто решил, что это лучший способ. – Sunny724
Связанные: http://stackoverflow.com/a/1732454/3410396 –