Regex_Suche c++
#include <iostream>
#include <regex>
int main() {
std::string s = "{\"|1|\":\"A\",\"|2|\":\"B\",\"|37|\":\"4234235\",\"|4|\":\"C\"}";
std::regex regex("37\\|\\\\\":\\\\\"\\K\\d*");
std::smatch m;
regex_search(s, m, regex);
std::cout << "match: " << m.str(1) << std::endl;
return 0;
}
Warum stimmt es nicht mit dem Wert überein 4234235
?
Testen Sie die Regex hier:https://regex101.com/r/A2cg2P/1Es passt.
Antworten
1 WiktorStribiżew
Ihr Online-Regex-Test ist falsch, da Ihr tatsächlicher Text falsch ist {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
. Möglicherweise sehen Sie, dass Ihr Regex nicht damit übereinstimmt .
Außerdem verwenden Sie eine ECMAScript-Regex-Variante in std::regex
, aber Ihre Regex ist PCRE-konform. ECMAScript Regex unterstützt zB keinen \K
Match-Reset-Operator.
Sie brauchen eine "\|37\|":"(\d+)
Regex, sehen Sie sich die Regex-Demo an . Einzelheiten :
"\|37\|":"
- wörtlicher"|37|":"
Text(\d+)
- Gruppe 1: eine oder mehrere Ziffern.
Sehen Sie sich die C++-Demo an :
#include <iostream>
#include <regex>
int main() {
std::string s = "{\"|1|\":\"A\",\"|2|\":\"B\",\"|37|\":\"4234235\",\"|4|\":\"C\"}";
std::cout << s <<"\n";
std::regex regex(R"(\|37\|":"(\d+))");
std::smatch m;
regex_search(s, m, regex);
std::cout << "match: " << m.str(1) << std::endl;
return 0;
}