Giriş
Şu satırı dahil ederiz.
Açıklaması şöyle. regex_token_iterator'den farklı olarak sadece yakaladıklarını döndürür. regex_token_iterator eşleşen ve eşleşmeyen kısımlar erişim sağlıyor.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include <regex>
regex_search ile yapılan işi iterator kullanarak gerçekleştirir. Tekrar eden düzenli ifadeleri yakalamak için kullanılır. Açıklaması şöylestd::regex_iterator is a read-only ForwardIterator that accesses the individual matches of a regular expression within the underlying character sequence.
(something)+ will only capture the first occurrence of something, not all of them. The right way to solve this problem is to write a regex that matches a single pair, and apply it repeatedly, e.g. via std::regex_iterator.Constructor
Şöyle yaparız.
std::string str = ...;
std::regex regex = ...;
auto it = std::sregex_iterator(str.begin(), str.end(), regex);
operator * metodu
Eşleşme grubuna erişmek için şöyle yaparız.
position() ve str() metodları ile eşleşmenin pozisyonunu ve eşleşmeyi alırız. Şöyle kullanırız.Eşleşme grubuna erişmek için şöyle yaparız.
std::regex regex(R"(#.*|(\w+:\w+))");
std::string str = "AA:BB CC:DD EE:FF #this is a comment XX:YY";
for(std::sregex_iterator i = std::sregex_iterator(str.begin(), str.end(), regex);
i != std::sregex_iterator();
++i)
{
std::smatch m = *i;
std::cout << m[1].str() << '\n';
}
position metoduregex rx("(2|25)");
string s = "2225";
for (sregex_iterator it(s.begin(), s.end(), rx), end; it != end; ++it) {
cout << it->position() << ": " << it->str() << endl;
}
Çıktı olarak şunu alırız.0: 2
1: 2
2: 25
str metoduŞöyle yaparız.
std::string str = ...;
std::regex regex = ...;
for(auto it = std::sregex_iterator(str.begin(), str.end(), regex);
it != std::sregex_iterator();++it)
{
std::cout<<it->str()<<std::endl;
}
Hiç yorum yok:
Yorum Gönder