2016-11-16 10 views
2

私はPythonでのRegexの作業についてかなりよく理解していますが、C++での作業のための正規表現の文字列は使用できません。私は次の例でこれをテストしました。https://regex101.com/r/5ad2Cu/1これはうまく見えます。しかし、同じ文字列は、次のC++コード断片に対してfalseを示します。Regex LookAroundはC++で動作しません

#include <iostream> 
#include <regex> 
using namespace std; 
int main() 
{ 
const char* rejectReason = "Failed to execute SQL. Error=ORA-00936: missing expression";  
regex rgx(".+?(?=(ORA-([0-9]{5}):))"); 
cout<<regex_match(rejectReason, rgx)<<endl; 
return 0; 
} 

私はC++や多くの参照に幾分新しいですが、先読みはなく、いけないC++での作業と、この前後参照については言及しないの世話に動作することを示しています。 C++でこれを行うための直接的な方法はありませんか?

+0

あなたはこの権利を持つキャプチャグループを知っていますか?あなたは最初のグループを望むでしょう... – Codexer

+0

多くの試合を意味しますか?はい、少なくとも1つ以上あります。 –

答えて

0

これをスターターとして試してみてください。これは、どのようにしてregexライブラリが機能するかという基本的な考え方を示します。

#include <iostream> 
#include <regex> 
using namespace std; 

int main() 
{ 
    string rejectReason = "Failed to execute SQL. Error=ORA-00936: missing expression"; 
    regex rgx(".*Error=ORA-([0-9]{5}).*$"); 
    if (regex_match(rejectReason, rgx)) { 
     cout << "String matches" <<endl; 
    } 

    smatch match; 
    string result; 
    if (regex_search(rejectReason, match, rgx) && match.size() > 1) { 
     result = match.str(1); 
    } else { 
     result = string(""); 
    } 

    cout << result << endl; 
    return 0; 
} 
+0

ありがとうございます。あなたのコードを通過した後、私は物事を複雑にする必要はないことを理解しました。 –

関連する問題