Выражение содержит недопустимое имя элемента сортировки c ++ regex - PullRequest
0 голосов
/ 20 января 2019

У меня есть регулярное выражение.Я нахожу регулярное выражение в строке.Однако каждый раз, когда я запускаю (не компилирую), я получаю эту ошибку: The expression contained an invalid collating element name.Это мое регулярное выражение:
:\w*:{[\w\s-+=\/*^%!;\(\)\[\]\{\}]*}:funcEND:.
Когда я использую его в своей программе:
regex const functionRegex(":\\w*:\\{[\\w\\s-+=\\/*^%!;\\(\\)\\[\\]\\{\\}]*\\}:funcEND:");.
Может кто-нибудь сказать мне, почему это вызывает ошибку?Я посмотрел онлайн, но не нашел ничего, что мог бы использоватьЯ также проверил регулярное выражение вики.

Вот текст, который должен соответствовать:

:functionDetector:{
    foo=foo+bar;
}:funcEND:

и:

:foo:{
    // hello world
}:funcEND:

Вот текст, который НЕ должен совпадать:

^BANK^{
    foo=1;
    bar=5;
}^BANK^

^UPDATE^{
    CALL:functionDectector;
}^UPDATE^

:hello:{
    // goo
}:qwerty:

Исходный код:

regex const functionRegex(":\\w*:\\{[\\w\\s-+=\\/*^%!;\\(\\)\\[\\]\\{\\}]*\\}:funcEND:");
ptrdiff_t const matchCount(distance(sregex_iterator(content.begin(), content.end(), functionRegex), sregex_iterator()));
ostringstream extraFuncInfoOSS;
extraFuncInfoOSS << "Extra functions detected: " << matchCount << "...";
cout << extraFuncInfoOSS.str() << endl;

1 Ответ

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

Сбегите тире - или сделайте его первым символом сразу после открывающей квадратной скобки [. Черта имеет особое значение в квадратных скобках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...