2017-07-14 66 views
1

我使用boost::regex編碼,它似乎不會給出與C++ 11的std::regex相同的結果。boost :: regex和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

然而,C++ 03與升壓1.64版本(GCC 8.0 in wandbox)給出Result : abc.txt

我也試過::regex::extended而不是::regex::ECMAScript但它們是一樣的。

是否有不明MAGICboost::regexstd::regex不一致?

回答

1

我不確定它是否被審議。 有一個boost::regex_constants::format_literal可以用作regex_replace的第四個參數,那麼你可以得到與std :: regex_replace相同的結果。但標準C++庫中沒有format_literal

+0

我不知道這樣的選項很重要!謝謝@何明 –