2011-12-26 9 views
0

私は正規表現をC++で作成しようとしていますが、コンパイルエラーが発生しています。私はウェブを見渡しましたが、その答えは見つかりませんでした。GNUプロジェクトCおよびC++コンパイラを使用したC++の正規表現

私のような例を貼り付けコピーしています:

#include <iostream> 
#include <tr1/regex> //<regex> didn't compile 
#include <string> 
using namespace std; 
int main(int argc, char **argv) { 
    string str = "127.0.0.1"; 
    std::tr1::regex rx("127.0.0.1"); 
    regex_match(str.begin(), str.end(), rx); 
    return 0; 
} 

私はこの構文は、Windowsで使用されて見たものから

/tmp/cc0zldN2.o: In function std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)':.... undefined reference to std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::_M_compile()...を取得しています。私はGNUプロジェクトのCとC++コンパイラでlinuxを使っています。 誰も私のコンパイラと一致するregexの例への参照を持っていますか?

ありがとうございました!

+2

「.......」は*重要な部分です*。完全なエラーメッセージを表示しないでください。 – Puppy

+0

例について。文字列を比較するか、IPを実際に解析する必要がありますか?あなたが実装しようとしたやり方では、単に '.'だけでなく、あらゆる文字にマッチする' .'があるため、純粋なIPよりも多くのものにマッチします。 '.'のみにマッチさせたい場合は、それをエスケープしてください(' \ .')。 – Mario

+0

gcc 4.7で正常に動作します(std :: regexを使用します:) –

答えて

1

前回(約半年前)に確認しましたが、GCCには実際のTR1実装がありませんでした。どんな理由であれ、ヘッダを追加しましたが、何らかの警告やエラーを追加するのではなく、実装をスキップしました。

GCCを使用する必要がない場合は、MSVCを使用して、完全な実装を得ているか、正規表現(PCRE、GNUのもの(名前は覚えていない)、SLRE、等。)。

+0

私はg ++を使用しなければなりません。それは私が取っているコースの一部です。他の提案や正規表現の使用をスキップしますか? –

+1

Boostのregexpライブラリを試してみてください。 –

+0

正規表現をスキップするか、上記のライブラリのいずれかを使用します(許可されていない限り)。彼らは使い方が簡単です。これがどんなコースなのか聞いてもよろしいですか?初心者C++のようなものであれば、直接文字列のアクセス/修正を使って実装することができます。 – Mario