0

"/""+""の文字列があります。" またはわかりやすい名前

文字列が上記の3つの特殊文字(/ +または。)のいずれかに一致するかどうかを確認するために正規表現を使用する方法を理解しようとしています。

少し読んだ後、私はboost :: xpressiveが進むべき道であると決めましたが、それでもそれを理解することはできません。

Boost:xpressiveはこのタスクに適していますか?私の正規表現文字列は何である必要がありますか?

ありがとう

4

2 に答える 2

2

なぜstd::string::find_first_of()あなた自身の解決策をするために使うのではないのですか?かなり単純なタスクのための多くの機械のように聞こえます。

編集

それでも行き詰まっている場合は、これを試してください。

#include <iostream>
#include <boost/xpressive/xpressive.hpp>

using namespace std;
using namespace boost::xpressive;

int main()
{
   sregex re = sregex::compile("[+./]|[:word:]+");

   sregex op = as_xpr('+') | '.' | '/';
   sregex rex = op | (+alpha);

   if (regex_match(string("word"), re))
      cout << "word" << endl;
   if (regex_match(string("word2"), re))
      cout << "word2" << endl;
   if (regex_match(string("+"), re))
      cout << "+" << endl;
   return 0;
}

示されているのと同じことを行うには2つの方法があります。名前の付いた変数reは、perlのような正規表現文字列で初期化されます。rexXpressiveネイティブ要素を使用します。

于 2010-12-10T15:16:56.373 に答える
1

Boost.Xpressiveはこのタスクにはやり過ぎかもしれませんが、それはあなたの要求です。

正規表現は、特別にフォーマットされた文字列を検証する場合の命の恩人です。ここでは、関係する形式はなく、可能な値のセットのみが含まれます。私のアドバイス:あなたの問題が単純で連続した文字列の同等性の比較によって解決できるのであれば、おそらく正規表現のようなものは必要ありません。

于 2010-12-10T15:23:59.597 に答える