Предполагается, что мое регулярное выражение захватывает имена всех объявлений функций:
([\w{1}][\w_]+)(?=\(.+{)
В JavaScript работает как положено:
'int main() {\r\nfunctionCall();\r\nfunctionDeclaration() {}\r\n}'.match(/([\w{1}][\w_]+)(?=\(.+{)/g);
// [ 'main', 'functionDeclaration' ]
В C ++ Builder я получаю эту ошибку :
regex_error (error_badrepeat): одному из *? + {Не предшествовало допустимое регулярное выражение.
Минимальное Воспроизводимое Пример:
#include <iostream>
#include <regex>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<string> matches;
string text = "int main() {\r\nfunctionCall();\r\nfunctionDeclaration() {}\r\n}";
try {
//regex myRegex("([\\w{1}][\\w_]+)(?=\\()"); works as intended
regex myRegex("([\\w{1}][\\w_]+)(?=\\(.+{)"); // throws error
sregex_iterator next(text.begin(), text.end(), myRegex);
sregex_iterator end;
while (next != end) {
smatch match = *next;
cout << match.str() << endl;
next++;
}
} catch (regex_error &e) {
cout << "([\\w{1}][\\w_]+)(?=\\(.+{)"
<< "\n"
<< e.what() << endl;
}
}
Я использовал g ++ для компиляции выше, вместо C ++ Builder, и ошибка, которую он выдает, отличается: Unexpected character in brace expression.