0

まず、私の英語についてお詫び申し上げます。

私は小さな C++ プロジェクトで作業しており、それを小さく保ちたいと思っています。主な問題は、正規表現を使用する必要があることですが、必要な方法で機能しません。

これはうまくいきます:

std::string s ("subject");
std::regex e ("(sub)(.*)");
if (std::regex_match (s,e))
  std::cout << "string object matched\n";

これもうまくいきます:

std::string s ("0");
std::regex e ("[0-9]", std::regex::extended);
if (std::regex_match (s,e))
  std::cout << "string object matched\n";

std::regex::awk、basic、またはこのコードが機能しないもののために std::regex::extended を変更しても:

std::string s ("00");
std::regex e ("[0-9]{2}", std::regex::extended);
if (std::regex_match (s,e))
  std::cout << "string object matched\n";

私は何か間違ったことをしていますか?

std::regex が完成していないことは知っていますが、このような単純な正規表現で機能するはずです。

とにかく、誰かが私に小さな正規表現ライブラリを教えてくれれば(ブーストしないでください)、感謝します。

追加情報

Linux Ubuntu 12.10 で作業しています。コンパイラは gcc > 4.7 です。

編集:

@jalf: コンパイルはしますが、最後の結果が間違っています。エラーが発生します。今日クライアントにいて、プログラムにアクセスできないため、結果を表示できません。

@KennyTM: はい、gcc/libstdc++ です。答えを探してこのフォーラムを読んでいます。繰り返しますが、ブーストは使用できません。

@Pete Becker: はい、gcc > 4.7 バージョンです。正確なバージョンを思い出せません。

4

2 に答える 2

1

VS2008の私にとって、これはうまくいくようです:

#include <iostream>
#include <regex>

void main()
{
    std::string s ("00");
    std::tr1::regex e ("[0-9]{2}", std::tr1::regex::extended);
    if (std::tr1::regex_match (s,e))
        std::cout << "string object matched\n";
}  

少なくとも Windows を使用している場合、MSDN の TR1 正規表現の概要 ( http://msdn.microsoft.com/en-us/library/bb982727.aspx ) によると、動作するはずですが、場合によっては中括弧をエスケープする必要がある場合があります (セクション「文法の概要」の表を参照してください)。Linux を使用している場合は、このトピックに関する gcc のドキュメントを参照する必要があると思います。

友人にオリジナルのコードを Linux (gcc バージョン 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)) で実行するように依頼しましたが、うまくいきませんでした。問題は Linux 固有のようです。中括弧のエスケープも機能しません。

于 2013-06-26T09:03:07.943 に答える