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 que não corresponde ao valor 4234235
?
Testando o regex aqui: https://regex101.com/r/A2cg2P/1 Combina.
Respostas
1 WiktorStribiżew
Seu teste de regex online está errado porque seu texto real é {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
, você pode ver que seu regex não corresponde a ele .
Além disso, você está usando um tipo de regex ECMAScript no std::regex
, mas seu regex é compatível com PCRE. Por exemplo, ECMAScript regex não oferece suporte ao \K
operador de redefinição de correspondência.
Você precisa de uma "\|37\|":"(\d+)
regex, consulte a demonstração da regex . Detalhes :
"\|37\|":"
-"|37|":"
texto literal(\d+)
- Grupo 1: um ou mais dígitos.
Veja a demonstração 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;
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?