在C ++中使用PCRE正则表达式标准代替ECMA

时间:2019-05-23 07:31:40

标签: c++ c++14

我正在尝试在我的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;
}

0 个答案:

没有答案