私のコードで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である。どちらのマシンにもルートはありません。
私は何とか拡張正規表現の構文は、GCC 4.1.2 – bronekk
の下で動作しないことを前提としています、私はそのタフなオプションのテストルートを持っていないので、が、私は、同じ疑いを持っていました。私はちょうどコンパイラを更新するために要求をプッシュする必要があると推測しています。私が最後に頼んだとき、私は文字通り笑って笑った。 – Zero
サイドノートでは、一致がまだ正しく検出されており、ライブラリが部分的に機能していることを示す3つのサブアッチが返されます。サブタッチのうちの2つが空の文字列として間違って返されます。 – Zero