Использование стандарта регулярных выражений PCRE в C ++ вместо ECMA - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь использовать регулярные выражения в моем коде C ++.У меня ошибка совместимости с форматом регулярных выражений.Я хотел бы использовать регулярное выражение, написанное в стандарте PCRE на C ++ std::regex.Есть ли способ сделать поддержку C ++ отличной от формата ECMA, или есть инструменты для преобразования фрагмента регулярного выражения из одного формата в другой?

Фрагмент регулярного выражения: ((?:\p{L}\p{M}*)+(?:['_-](?:\p{L}\p{M}*)+)*).Проблема, которую я хочу решить, - это фильтрация всех слов независимо от языка, на котором они написаны, и простой фрагмент регулярного выражения C ++: ([^\W_]+(?:['_-][^\W_]+)*) не удается этого достичь.

#include <string>
#include <iostream>
#include <regex>
#include <algorithm>

std::string process(std::string s) {
    std::regex r("((?:\p{L}\p{M}*)+(?:['_-](?:\p{L}\p{M}*)+)*)");
    std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
    std::smatch m = *i;
    return m.str();
}

int main() {
    std::cout << process("kąsa??") << std::endl; // -> should output kąsa
    return 0;
}
...