4

重複の可能性:
gcc4.7 は正規表現に関してバグがありますか?

http://www.cplusplus.com/reference/std/regex/regex_match/の例に従い、Ubuntu 12.04 64 ビットで g++ バージョン 4.6.3 でコンパイルしました。

以下は私の出力です:

string literal matched
string object matched
range matched
string literal with 3 matches
string object with 3 matches
range with 3 matches
the matches were: [subject] [sub] [bject] 

サンプル出力は次のとおりです。

string literal matched
string object matched
range matched
string literal with 3 matches
string object with 3 matches
range with 3 matches
the matches were: [subject] [sub] [ject]

私のマシンでは[object]が正しく抽出されていないことに注意してください。何か案は?

4

2 に答える 2

3

gcc の実装状況 (ver 4.6.3)によると、正規表現ライブラリはまだ完全には実装されていません。エラーはスローされず、警告も表示されません。これは確かに不快です。

ただし、他の人はこれを以前に観察しており、より最近のバージョンでも同様です。

一般的な提案は、Boost.Regexをさらに使用するか、別のコンパイラを試してみることです。

さらに読むには、この回答を参照してください。

于 2012-10-16T10:38:44.023 に答える
0

例を次のように減らすことができます。

std::string s("subject");
std::regex e("(sub)(.*)");
std::smatch sm;
std::regex_match(s, sm, e);

さらに興味深い:

std::string s("subject");
std::regex e("(sub)(ject)");
std::smatch sm;
std::regex_match(s, sm, e);

つまり、これは GNU 実装のバグのように見えます。

于 2012-10-16T09:18:38.340 に答える