我正在尝试在我的C ++代码中使用正则表达式。我有一个正则表达式格式兼容性错误。我想使用以C ++ std::regex
中的PCRE标准编写的正则表达式片段。除了ECMA格式,是否有任何其他方法可以使C ++支持,或者是否有工具将正则表达式片段从一种格式转换为另一种格式?
正则表达式代码段是:((?:\p{L}\p{M}*)+(?:['_-](?:\p{L}\p{M}*)+)*)
。我要解决的问题是过滤所有与所用语言无关的单词,并使用简单的C ++ regex代码段:([^\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;
}