2016-09-19 11 views
2

私はregex101でJavasScript正規表現を作成し、テストしました。それをC++(visual studio 2013)に変換した後、std :: regex_search()はfalseを返します。JavaScriptの正規表現がC++で一致しない

私の間違いはありますか?

ワーキングJavaScriptの正規表現:

struct[\s]+([\w]+).+?public[\s]+([\w]+)[\s\S]+?\{([\s\S]+?)\}; 

失敗C++の正規表現(同じ文字列で):

std::regex rgxGetStructs("struct[\\s]+([\\w]+).+?public[\\s]+([\\w]+)[\\s\\S]+?\\{([\\s\\S]+?)\\};", std::regex_constants::ECMAScript); 
const char* test = "struct mySTruct : public boss { int test; };"; 
bool chk = std::regex_search(std::string(test), rgxGetStructs); 
+0

'R" rx(struct [\ s] +([\ w] +)のような生の文字列リテラルを試しましたか?+ public [\ s] +([\ w] +)[\ s \ S ] +?\ {([\ s \ S] +?)\};)rx "'?また、それがいかに正確に失敗しているか説明してください。 –

+0

@πάνταῥεῖそれは何の構文ですか? – qxz

+0

@qxz [生の文字列リテラル](http://en.cppreference.com/w/cpp/language/string_literal) –

答えて

2

πάνταῥεAfterは、この失敗はVisual Studio 2013のバグによって引き起こされたと指摘し、STLと同じ機能を提供するboost regexライブラリに切り替えました。問題を解決するためには、stdからboostへの名前空間の変更が必要でした。

1

私のミスは何ですか?

あなたの間違いではありません。 VS2013 std::regexの実装はバグがあるようです。ここで参照される:コメントで言及した他の人のよう

、あなたの正規表現は、Visual Studioまたは-GCCの新しいバージョンで正常に動作します。

+0

ありがとう!私はboost regexライブラリに切り替えて問題を解決しました – siskat

+0

@siskat別の答えとして追加することができます(もう少し詳しく)。将来の研究にとって価値があると私は考えています。 –

関連する問題