2016-11-26 5 views
-2

オリジナルの質問:「Xcode 8の最新のLLVM 8コンパイラ(clang 8/3.8?)を使ってMacで正規表現を大量に使用するプログラムを開発しました。 。私は、Linux上で実行しているときに私に正しい出力を与えるために私のコードを取得することができませんでした。私は気づいていないよ、いくつかの正規表現の互換性の問題があるように思われる。MacとLinuxマシン間の正規表現との互換性問題

どのように私はこの問題を解決することができますか?

+0

[gcc?](https://gcc.gnu.org/projects/cxx-status.html#cxx11) – kaylum

+0

正規表現で問題をデバッグして私たちと共有しても簡単ではないでしょうかあなたのコードをコンパイラとオペレーティングシステム間でさらに互換性を持たせることができますか?あるいは、もっと鈍いところで、ツールセットを変更する代わりにコード内のバグを修正しましょう。問題はコンパイラ自体に関連するのではなく、コード(バグ)またはランタイムライブラリのいずれかと関連する可能性があります。 – selbie

+0

それで、1)regexの使用法の名前空間をstd ::からboost ::(と#include )に変更することが私にもたらされました。これは互換性の問題の*ほとんど*修正されました。それから私は自分のコードのバグを発見しました。イテレータをベクトルの可能性のあるヌル位置に進めて、そのメモリにアクセスしようとしました。私の最後の投稿を見てくださいすべて修正済みです! –

答えて

0

std :: swap :: boostのために

//using std::regex_replace; 
using boost::regex_replace; 
using boost::sregex_iterator; 
//using std::sregex_iterator; 
//using std::smatch; 
using boost::smatch; 
//using std::regex; 
using boost::regex; 

と(私はすでに::ファイルシステムをブーストを使用していたので、ヘッダー/ライブラリのほとんどは、すでにリンク/含まれていた)

#include <boost/regex.hpp> 

を追加します。私はすぐにはわかりませんが、これらの機能の両方がBoostでより安定した親を持っていることに注意してください(少なくともboost :: filesystemの場合、C++の 'experimental'バージョンは実際Boostです)。

これは、私のMacマシンとLinuxマシンの両方でboost仕様に準拠していることが保証されているため、互換性の問題を処理しました。

この回答を取って5時間を節約できました。おそらく5時間節約できます。