Normal ifade_arama c++
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;
}
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 Mar 01 2021 at 02:50
Ç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::regexnormal ifade biçimi kullanıyorsunuz , ancak normal ifadeniz PCRE uyumludur. Örneğin, ECMAScript normal ifadesi \Keş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;
}
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'