(?<=name=")(?:[^\\"]+|\\.)*(?=")
を書くことがあり
(であるC++で)
初めての正規表現... どうすればいいですか?
std::regex TheName("(?<=name=")(?:[^\\"]+|\\.)*(?=")");
正しくお願いしますか?
(?<=name=")(?:[^\\"]+|\\.)*(?=")
を書くことがあり
(であるC++で)
初めての正規表現... どうすればいいですか?
std::regex TheName("(?<=name=")(?:[^\\"]+|\\.)*(?=")");
正しくお願いしますか?
C++の正規表現では、ポジティブなlookbehindではなくキャプチャを使用する必要があります。また、([^"\\]|\\.)*
サブパターンをアンロールして正規表現を可能な限り速くするには、ループを解除する原則を使用することをお勧めします。[^\"\\]*(?:\\.[^\"\\]*)*
を参照してください。また、正規表現のパターンを定義する際には、余分な文字列リテラル(R"(<PATTERN>)"
を参照)を使用することをお勧めします。
はC++ demoを参照してください:
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::string s = "name=\"bla \\\"bla\\\"\"";
std::regex TheName(R"(name=\"([^\"\\]*(?:\\.[^\"\\]*)*)\")");
std::smatch m;
if (regex_search(s, m, TheName)) {
std::cout << m[1].str() << std::endl;
}
return 0;
}
結果:C++ `のstdでサポートされている正規表現のフレーバーのbla \"bla\"
ok thx - 問題があります。gccを使用しています。-std = C++ 11フラグが設定されていますが、std :: regex_searchは無効な引数を与えます。ここの例http://www.cplusplus.com/reference/regex/regex_search/は同じエラーでコンパイルに失敗します。あなたはアイデアがありますか? – ZoOl007
最新のGCCバージョンを使用してください。あなたは何ですか? –
gcc(Min_WW-W64プロジェクトで構築されたx86_64-posix-seh-rev0)5.3.0私はWindows atmにいます – ZoOl007
なし:: regex'がlookbehindsをサポートしています。キャプチャグループを使用します。 'std :: regex TheName(" name = \ "([^ \" \\\\] *(?:\\\\。[^ \ "\\\\] *)*)\" ");' –