2

次のようなシーケンスを持つ文字列を受け入れるために正規表現を使用しようとしています

ifelseifelseififif

したがって、他のすべての場合に if が必要ですが、すべての if に else が必要なわけではありません。このような単純な正規表現を使用して、ペンと紙でこれを実行できることはわかって((if)*+(ifelse)*)*いますが、これまでライブラリを使用したことがないため、ライブラリでこれを実行できるかどうかはわかりません。では、上で書いたような正規表現に基づいて文字列を受け入れたり拒否したりすることは可能でしょうか?

私は足を濡らすためにこのサンプルを書きましたが、なぜ false を返すのかわかりません。regex_search() は部分文字列の一致を見つけるはずではありませんか? そのスニペットは毎回 nope を出力します。

#include <regex>
#include <iostream>
using namespace std;

int main(){
  string sequence="ifelse";
  regex rx("if");
  if(regex_search(sequence.begin(),sequence.end(),rx)){
    cout<<"match found"<<endl;
  }else{
    cout<<"nope"<<endl;
  }
}

私はg ++ 4.7を使用しており、両方g++ -std=gnu+11 reg.cpp でコンパイルしようとしましたg++ -std=c++11 reg.cpp

4

2 に答える 2

1

これは「一致が見つかりました」と表示されます。実行しただけです。C ++ 11を使用していない場合はコンパイルされませんが、コンパイル方法は次のとおりです。 clang++ -std=c++11 -stdlib=libc++ reg.cpp

于 2013-05-03T01:34:21.033 に答える