0

C ++で特殊文字のブーストパターンを作成する方法を知っている人はいますか?

つまりそれだけでなく("[A-Za-z0-9 \\s]*")

などなど、_ + - \ ) \\ ( . | ]たとえば次のような文字列:

"hello world \\has (special.characters) + defined_with[boost]"有効です

しかし

"!hello world \\has (special.characters) + defined_with[boost]"有効じゃない

より具体的には、次のようなものです。

string input;

getline(cin,input);

boost::regex pattern1 ("[a-zA-Z0-9 \\s \\_ \\+ \\- \\\ \\) \\\\ \\( \\. \\| ]*");

if (!regex_match (input, pattern1))
    {
    cout << "invalid input" << endl;
    }
    else
        cout << input << " - is valid" << endl;

あなたが提供できるどんな助けにも感謝します

4

2 に答える 2

0

たとえば、そのように通過しない文字を除外してセットを実行することをお勧めします。

[^\\!\\?]+、次に一致するかどうかをテストします

于 2013-03-21T14:05:33.500 に答える
0

Boost:regex は今のところ使用していませんが、Regex については少し知っています。少なくとも1つの「特殊文字」が存在する場合にのみ一致させたいと思います。さらに、英数字のみを有効にし、残りを無効にしたいと思います。「Good String」や「\Bad.String)」のように。これについて、より具体的に説明してください。

まず、私の知る限り、0 個以上の「*」を持つ 1 つのクラスのみに一致すると、常に true が返されます。クラスのインスタンスが少なくとも 1 つある場合にのみ一致させるには、代わりに「+」を試してください。

第二に、 [^a-zA-Z0-9 ] のようなクラスを使用しようとすると、クラス内にないものがあれば true になります。

さらに読むには、ドキュメントをお勧めします(ええ、正規表現構文は非常に地獄です):http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax .html または正規表現構文の私のお気に入り http://en.wikipedia.org/wiki/Regular_expression

これが役立つことを願っています!

于 2013-03-21T13:28:47.580 に答える