最佳答案
我尝试在一段 C + + 11代码中使用 std: : regex,但是看起来支持有点问题。举个例子:
#include <regex>
#include <iostream>
int main (int argc, const char * argv[]) {
std::regex r("st|mt|tr");
std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl;
std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl;
std::cerr << "st|mt|tr" << " matches tr? " << std::regex_match("tr", r) << std::endl;
}
产出:
st|mt|tr matches st? 1
st|mt|tr matches mt? 1
st|mt|tr matches tr? 0
当使用 gcc (MacPorts gcc474.7.1 _ 2)4.7.1编译时,
g++ *.cc -o test -std=c++11
g++ *.cc -o test -std=c++0x
或者
g++ *.cc -o test -std=gnu++0x
此外,如果我只有两种可选模式,例如 st|mt
,那么正则表达式工作得很好,所以由于某些原因,最后一种模式看起来不匹配。该代码与苹果 LLVM 编译器工作得很好。
对于如何解决这个问题有什么想法吗?
更新 一个可能的解决方案是使用组来实现多个替代方案,例如 (st|mt)|tr
。