0


たとえば、ブロックにネストされたC++コードでいくつかの変数を抽出しようとしています。

        DEL_TYPE_NONE,
            DEL_TYPE_DONE,
    DEL_TYPE_WAIT,

「DEL_TYPE_NONE」 「DEL_TYPE_DONE」 DEL_TYPE_WAIT」と一致させたい



このようにパターンを作成しました
。std::stringpat( "(?<= ^ [\\ t]?)[A-Z0-9 _] +(?=、$)");

しかし、コンパイラがパターンの読み取りに疲れていると、エラーメッセージが表示され続けます。
わかりませんが問題ありますか?\\tの後にマークを付け
ます マークを付けると、コンパイルされて「DEL_TYPE_WAIT」
のみが検索さ れます。先読みでリピートを使用できないのはなぜですか。plzは私がここで完全に失われているのを助けます;(

ありがとうございました

4

2 に答える 2

2

私は答えを見つけました。いいえ、このマニュアルから

後ろを見て

(?<=pattern) は、pattern が現在の位置の前の文字と一致する場合にのみ、ゼロ文字を消費します(pattern は固定長でなければなりません)。

于 2009-02-12T05:39:05.700 に答える
0

POSIXに基づくと、正規表現は「DEL_TYPE _([ND] ONE | WAIT)」だと思います。

それはあなたが上にリストしたものに基づいています。実際の問題は、tを二重にエスケープすることです。タブ/スペースが0または1つだけではない可能性があるため、おそらく[\ t \s]*を実行する必要があります。

于 2009-02-12T03:52:33.210 に答える