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;
}
Kenapa nilainya tidak sesuai 4234235
?
Menguji regex di sini:https://regex101.com/r/A2cg2P/1Itu cocok.
Jawaban
1 WiktorStribiżew
Tes regex online Anda salah karena teks Anda yang sebenarnya {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
, Anda mungkin melihat bahwa regex Anda tidak cocok .
Selain itu, Anda menggunakan rasa regex ECMAScript di std::regex
, tetapi regex Anda sesuai dengan PCRE. Misalnya ECMAScript regex tidak mendukung \K
operator reset kecocokan.
Anda memerlukan "\|37\|":"(\d+)
regex, lihat demo regex . rincian :
"\|37\|":"
"|37|":"
- teks literal(\d+)
- Grup 1: satu atau lebih digit.
Lihat 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;
}