2012-01-20 5 views
2

私のコードでboost regex libraryを使用しています。私は、Fedoraを実行しているマシンでコンパイルして正しく動作する単純なアプリケーションを持っています。 SUSE Linux上で同じコードをコンパイルすると、最初のサブダクション文字列を除くすべてが空になります。 Fedoraの上一部のマシンでBoost Regex Submatchesが空になる

const string pattern = "(abc)(def)"; 
const string target = "abcdef"; 

boost::regex regexPattern(pattern, boost::regex::extended); 
boost::smatch what; 

bool isMatchFound = boost::regex_match(target, what, regexPattern); 
if (isMatchFound) 
{ 
    for (unsigned int i=0; i < what.size(); i++) 
    { 
     cout << "WHAT " << i << " " << what[i] << endl; 
    } 
} 

出力を次のように

コードがあるSUSE上で次の

WHAT 0 abcdef 
WHAT 1 abc 
WHAT 2 def 

出力は、私はいずれかを見つけることができないよう、次の

WHAT 0 abcdef 
WHAT 1 
WHAT 2 

ですどこでも同様の問題を参照してください。私は単純な修正があると仮定していますが、Webを精査する時代にもそれを見つけることはできませんでした。

コンパイラには次のバージョンがあります。

のFedora:G ++(GCC)4.5.1 20100924(Red Hatの4.5.1-4)
SUSE:G ++(GCC)4.1.2 20070115(SUSE Linux)の

私はブーストバージョン1.48を使用しています。両方とも0である。どちらのマシンにもルートはありません。

+1

私は何とか拡張正規表現の構文は、GCC 4.1.2 – bronekk

+0

の下で動作しないことを前提としています、私はそのタフなオプションのテストルートを持っていないので、が、私は、同じ疑いを持っていました。私はちょうどコンパイラを更新するために要求をプッシュする必要があると推測しています。私が最後に頼んだとき、私は文字通り笑って笑った。 – Zero

+0

サイドノートでは、一致がまだ正しく検出されており、ライブラリが部分的に機能していることを示す3つのサブアッチが返されます。サブタッチのうちの2つが空の文字列として間違って返されます。 – Zero

答えて

0

コンパイラをそれ以降のバージョンにアップデートすることで問題は解決しました。私は以前の4.1コンパイラを使ってコンパイルすることで驚いたことに、そのSUSEボックスのサブ機能を静かに壊しました。

関連する問題