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
입니까?
여기에서 정규식 테스트: https://regex101.com/r/A2cg2P/1 그것은 일치합니다.
답변
1 WiktorStribiżew
실제 텍스트가 이므로 온라인 정규식 테스트가 잘못되었습니다 . {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
정규식 이 일치하지 않는 것을 볼 수 있습니다 .
게다가 에서 ECMAScript 정규식 풍미를 사용 std::regex
하고 있지만 정규식은 PCRE와 호환됩니다. 예를 들어 ECMAScript 정규식은 \K
일치 재설정 연산자를 지원하지 않습니다 .
"\|37\|":"(\d+)
정규식 이 필요합니다 . 정규식 데모를 참조 하세요 . 세부사항 :
"\|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;
}