Я пытаюсь использовать регулярные выражения в моем коде 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;
}