Sie müssen in C++ - Regex Capturing anstelle von positivem Lookbehind verwenden. Es ist auch ratsam, das Unroll-The-Loop-Prinzip zu verwenden, um das ([^"\\]|\\.)*
Submuster auszurollen, um die Regex so schnell wie möglich zu machen, siehe [^\"\\]*(?:\\.[^\"\\]*)*
. Es ist außerdem ratsam, bei der Definition von Regex-Mustern Raw-String-Literale zu verwenden (siehe R"(<PATTERN>)"
), um Überschreibungen zu vermeiden.
Siehe 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;
}
Ergebnis: bla \"bla\"
Keiner der Regex-Varianten von C++ unterstützt 'std :: regex' Lookbehinds unterstützt. Verwenden Sie eine einfangende Gruppe. 'std :: regex TheName (" name = \ "([^ \" \\\\] * (?: \\\\. [^ \ "\\\\] *) *) \" ");' –