2010-12-10 11 views
0

"/" "+" "にすることができる文字列があります。または私は、文字列は、上記の3つの特殊文字のいずれかと一致するかどうかを確認するために正規表現を使用する方法を把握しようとしているBoost :: Xpressiveを使用して1文字に一致させる

わかりやすい名前(/ +またはを。)

は読書のビットを行った後、私は決めましたboost :: xpressiveは行く方法でしたが、私はまだそれを理解できません。

は、この作業に適したxpressiveです。私の正規表現の文字列は何にする必要がありますか?

おかげ

答えて

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のような正規表現の文字列で初期化されています。 rexはXpressiveネイティブエレメントを使用します。

+0

私は正規表現について学びたいと思っています。私は上の質問に対する解決策を見つけられませんでした。私はそれが私のことを混乱させていたお互いの隣にエスケープ文字だったと思います。 – hipyhop

+1

@TomFLuff:それでは、それは違うのです。正規表現は非常に強力なツールなので、掘り下げてください。クールなものを使用するための解決策を過度に複雑にしないように心がけてください(私は常にこれを思い出さなければなりません)。 – gregg

1

私は、Boost.Xpressiveがタスクの過労かもしれませんが、あなたの呼び出しだと思います。

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

関連する問題