Regex_search 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;
}
¿Por qué no coincide con el valor 4234235
?
Probando la expresión regular aquí: https://regex101.com/r/A2cg2P/1 Coincide.
Respuestas
1 WiktorStribiżew
Su prueba de expresiones regulares en línea es incorrecta porque su texto real es {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
, puede ver que su expresión regular no coincide .
Además, está utilizando un sabor de expresión regular ECMAScript en std::regex
, pero su expresión regular es compatible con PCRE. Por ejemplo, ECMAScript regex no admite el \K
operador de reinicio de coincidencia.
Necesita una "\|37\|":"(\d+)
expresión regular, consulte la demostración de expresiones regulares . Detalles :
"\|37\|":"
-"|37|":"
texto literal(\d+)
- Grupo 1: uno o más dígitos.
Vea la demostración de C ++ :
#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;
}