我使用boost::regex
进行编码,似乎它与C ++ 11 std::regex
没有相同的结果。
考虑遵循简单的代码:
#include <string>
#include <iostream>
#if defined(_MSC_VER) || (__cplusplus >= 201103L)
#include <regex>
#else // defined(_MSC_VER) || (__cplusplus >= 201103L)
#include <boost/regex.hpp>
#endif // defined(_MSC_VER) || (__cplusplus >= 201103L)
namespace {
#if defined(_MSC_VER) || (__cplusplus >= 201103L)
using std::regex;
using std::regex_replace;
#else // defined(_MSC_VER) || (__cplusplus >= 201103L)
using boost::regex;
using boost::regex_replace;
#endif // defined(_MSC_VER) || (__cplusplus >= 201103L)
} // namespace
int main() {
std::string input = "abc.txt";
::regex re("[.]", ::regex::extended);
std::string output = ::regex_replace(input, re, "\\.");
std::cout << "Result : " << output << "\n";
return 0;
}
C ++ 11版(GCC 5.4,GCC 8.0 in wandbox,MSVC 2015)给出Result : abc\.txt
但是,带有Boost 1.64版本(GCC 8.0 in wandbox)的C ++ 03会给出Result : abc.txt
我也尝试::regex::extended
代替::regex::ECMAScript
,但它们是相同的。
boost::regex
和std::regex
是否存在未知 MAGIC 不一致的内容?
答案 0 :(得分:1)
我不确定是否有人慎重。
有一个boost::regex_constants::format_literal
可以用作regex_replace
的第四个参数,然后你可以得到与std :: regex_replace相同的结果。但是标准c ++库中没有format_literal
。