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;
}
ทำไมไม่ตรงกับค่า4234235
?
ทดสอบ regex ที่นี่:https://regex101.com/r/A2cg2P/1มันไม่ตรงกัน
คำตอบ
1 WiktorStribiżew
การทดสอบ regex ออนไลน์ของคุณไม่ถูกต้อง เนื่องจากข้อความจริงของคุณคือ{"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
คุณอาจเห็นว่า regex ของคุณไม่ตรงกัน
นอกจากนี้ คุณกำลังใช้ ECMAScript regex รสในstd::regex
แต่ regex ของคุณเป็นไปตาม PCRE เช่น ECMAScript regex ไม่รองรับ\K
ตัวดำเนินการรีเซ็ตการจับคู่
คุณต้องมี"\|37\|":"(\d+)
regex ดูการสาธิต regex รายละเอียด :
"\|37\|":"
- ข้อความตามตัว"|37|":"
อักษร(\d+)
- กลุ่ม 1: หนึ่งหลักขึ้นไป
ดูการสาธิต 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;
}