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;
}
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
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'