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;
}
Dlaczego nie odpowiada wartości 4234235
?
Testowanie wyrażenia regularnego tutaj:https://regex101.com/r/A2cg2P/1To pasuje.
Odpowiedzi
1 WiktorStribiżew
Twój internetowy test regex jest błędny, ponieważ Twój rzeczywisty tekst jest taki {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
, możesz zauważyć, że Twoje wyrażenie regularne nie pasuje do niego .
Poza tym używasz wyrażenia regularnego ECMAScript w std::regex
, ale Twoje wyrażenie regularne jest zgodne z PCRE. Np. wyrażenie regularne ECMAScript nie obsługuje \K
operatora resetowania dopasowania.
Potrzebujesz "\|37\|":"(\d+)
wyrażenia regularnego, zobacz demonstrację wyrażenia regularnego . Szczegóły :
"\|37\|":"
- dosłowny"|37|":"
tekst(\d+)
- Grupa 1: jedna lub więcej cyfr.
Zobacz demo 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;
}