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::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ı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'