रेगेक्स_सर्च सी++

Mar 01 2021
#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 Mar 01 2021 at 02:50

आपका ऑनलाइन रेगेक्स परीक्षण गलत है क्योंकि आपका वास्तविक टेक्स्ट है {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}, आप देख सकते हैं कि आपका रेगेक्स इससे मेल नहीं खाता है ।

इसके अलावा, आप ईसीएमएस्क्रिप्ट रेगेक्स स्वाद का उपयोग कर रहे हैं std::regex, लेकिन आपका रेगेक्स पीसीआरई अनुपालन है। जैसे ईसीएमएस्क्रिप्ट रेगेक्स \Kमैच रीसेट ऑपरेटर का समर्थन नहीं करता है ।

आपको "\|37\|":"(\d+)रेगेक्स चाहिए, रेगेक्स डेमो देखें । विवरण :

  • "\|37\|":"- शाब्दिक "|37|":"पाठ
  • (\d+) - समूह 1: एक या अधिक अंक।

सी ++ डेमो देखें :

#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;
}