2017-11-17 2 views
1

"!"で始まるすべての10進数をどのように一致させるのですか?指定された文字列の中で(bang)?私は、次のコードを書かれているが、それはアサート'!'で始まる10進数のマッチング方法C++で

#include<iostream> 
#include<regex> 

int main() 
{ 
    std::string s1("{!112,2,3}"); 
    std::regex e(R"(\!\d+)", std::regex::grep); 

    std::cout << s1 << std::endl; 

    std::sregex_iterator iter(s1.begin(), s1.end(), e); 
    std::sregex_iterator end; 

    while(iter != end) 
    { 
     std::cout << "size: " << iter->size() << std::endl; 

     for(unsigned i = 0; i < iter->size(); ++i) 
     { 
      std::cout << "the " << i + 1 << "th match" << ": " << (*iter)[i] << std::endl; 
     } 
     ++iter; 
    } 
} 

アサート

terminate called after throwing an instance of 'std::regex_error' 
    what(): regex_error 
Aborted (core dumped) 
+0

で始まるどんな整数!? – pm100

+1

'\!'だけが必要だとは思わない。その特殊文字ではない – pm100

+0

ちょうど '!'はうまくいきません –

答えて

2

まず、あなたが最新のGCCコンパイラを使用していることを確認して失敗します。

は、次に感嘆符と一致した後、それからちょうど試合を反復しながら、自分の価値観を保持している(*iter)[1]をつかむ

1桁以上Iintoグループ1をキャプチャR"(!(\d+))"パターンを使用します。

C++ demoを参照してください:

#include<iostream> 
#include<regex> 
int main() { 
    std::string s1("{!112,2,3} {!346,765,8}"); 
    std::regex e(R"(!(\d+))"); 
    std::cout << s1 << std::endl; 
    std::sregex_iterator iter(s1.begin(), s1.end(), e); std::sregex_iterator end; 
    while(iter != end) { 
     std::cout << "Value: " << (*iter)[1] << std::endl; 
     ++iter; 
    } 
} 

出力:

{!112,2,3} {!346,765,8} 
Value: 112 
Value: 346 
関連する問題