15 Ağustos 2017 Salı

std::regex_token_iterator Sınıfı

Giriş
std::string için sregex_token_iterator kullanılır. constant char için cregex_token_iterator kullanlır.

regex_search ile yapılan işi iterator kullanarak gerçekleştirir. regex_iterator ve regex_token_iterator isimli iki farlık sınıf var. İlki sadece eşleşmelere erişimi sağlıyor, ikincisi ise eşleşen ve eşleşmeyen kısımlar erişim sağlıyor.

Kullanım
Şöyle yaparız. regex_token_iterator sınıfının en son parametresine -1 vererek tüm capture group'ları ve aradaki seperator grupları istediğimizi belirtiriz.
auto str = std::string{"..."};
auto regex = std::regex{"..."};
auto it = std::regex_token_iterator{str.cbegin(), str.cend(), regex, -1};
auto const end = std::regex_token_iterator{};

while (it != end)
{
    ++it;
}
Constructor - Capture Group Numarası ile
Şöyle yaparız. Sınıfı kurarken 1 vermemizin sebebi, yakalanan birinci grubu istememiz.
string data{"..."};
regex re{"<([^>]+)>"};
regex_token_iterator<string::iterator> it{data.begin(), data.end(), re, 1};
Bitiş iterator için şöyle yaparız.
decltype(it) rend{};
*operator
Şöyle yaparız.
while (rit != rend) std::cout << *it++ << std::endl;

Hiç yorum yok:

Yorum Gönder