Normal ifade_arama 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;
}
Neden değerle eşleşmiyor 4234235
?
Normal ifadeyi burada test etme: https://regex101.com/r/A2cg2P/1 Eşleşiyor.
Yanıtlar
1 WiktorStribiżew
Çevrimiçi normal ifade testiniz yanlış çünkü asıl metniniz yanlış {"|1|":"A","|2|":"B","|37|":"4234235","|4|":"C"}
, normal ifadenizin buna uymadığını görebilirsiniz .
Ayrıca, içinde bir ECMAScript std::regex
normal ifade biçimi kullanıyorsunuz , ancak normal ifadeniz PCRE uyumludur. Örneğin, ECMAScript normal ifadesi \K
eşleşme sıfırlama operatörünü desteklemez .
"\|37\|":"(\d+)
Normal ifadeye ihtiyacınız var , normal ifade demosuna bakın . Ayrıntılar :
"\|37\|":"
- gerçek"|37|":"
metin(\d+)
- Grup 1: bir veya daha fazla rakam.
C++ demosuna bakın :
#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;
}
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'