5

そこで私の教授は、C++ で正規表現を使用する作業を教えてくれました。

そこで、Eclipse でコードを作成しようとしました (Linux (ubuntu 12.04) を使用しています)。

だから私はコードを取った:

   // regex_search example
#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string s ("this subject has a submarine as a subsequence");
  std::smatch m;
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"

  std::cout << "Target sequence: " << s << std::endl;
  std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl;
  std::cout << "The following matches and submatches were found:" << std::endl;

  while (std::regex_search (s,m,e)) {
    for (auto x:m) std::cout << x << " ";
    std::cout << std::endl;
    s = m.suffix().str();
  }

  return 0;
}

ご覧のとおり、これは正規表現を操作するための単純なコードです。

だから私はそれを構築しようとすると、Eclipseは私にエラーを与えます:

Type 'smatch' could not be resolved

また:

Type 'std::regex' could not be resolved

何が問題ですか ?

フラグ -std=c++0x を適切な場所 (プロパティ -> c/c++ ビルド -> その他) に追加しようとしましたが、何も起こりません。

多分私はそれを間違っていますか?

pthread のようにライブラリへのリンクを追加する必要があるかもしれません。

4

3 に答える 3

0

std::tr1名前空間の下に正規表現が追加されます。正規表現のオブジェクトを として宣言してください。 std::tr1::regex動作するはずです

于 2013-07-10T11:41:32.883 に答える
0

フラグだけでは不十分です。「C/C++ General -> Paths and Symbols -> Symbols -> GNU C++」にもプリプロセッサ シンボル「____GXX_EXPERIMENTAL_CXX0X____」を追加する必要があります。詳細については、次の質問を参照してください: Eclipse CDT C++11/C++0x サポート. Eclipse wiki にもあります: http://wiki.eclipse.org/CDT/User/FAQ#CDT_does_not_recognize_C.2B.2B11_features。2 番目のリンクには、「非表示」オプションを説明するフォーラム ページへの追加リンクもあります ( http://www.eclipse.org/forums/index.php/mv/msg/373462/909018/#msg_909018 )。リンクで説明されているように「hidden」オプションを使用してコンパイラを構成すると、「____GXX_EXPERIMENTAL_CXX0X____」フラグを再度削除しても機能します。

于 2013-10-28T23:33:08.730 に答える