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;
}
Tại sao nó không khớp với giá trị 4234235
?
Kiểm tra regex tại đây: https://regex101.com/r/A2cg2P/1 Nó phù hợp.
Trả lời
1 WiktorStribiżew
Kiểm tra regex trực tuyến của bạn là sai bởi vì văn bản thực tế của bạn là {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
, bạn có thể thấy rằng regex của bạn không khớp với nó .
Ngoài ra, bạn đang sử dụng hương vị regex ECMAScript std::regex
, nhưng regex của bạn tuân thủ PCRE. Ví dụ: ECMAScript regex không hỗ trợ \K
toán tử thiết lập lại khớp.
Bạn cần một "\|37\|":"(\d+)
regex, hãy xem bản demo regex . Chi tiết :
"\|37\|":"
-"|37|":"
văn bản chữ(\d+)
- Nhóm 1: một hoặc nhiều chữ số.
Xem bản trình diễn 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;
}