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;
}
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
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'
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'