14 Aralık 2017 Perşembe

regex sregex_iterator Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/regex.hpp>
Tekrar eden düzenli ifadeleri yakalamak için kullanılır. Açıklaması şöyle
(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
Örnek 
Şöyle yaparız.
std::string str = "...";
boost::regex re = ...;
boost::sregex_iterator it = boost::sregex_iterator (str.begin(), str.end(), re);
Örnek
Düzenli ifade içinde iki tane yakalama grubu olsun. Şöyle yaparız.
const boost::regex expr{ R"..." };

const std::string s = ...;


boost::sregex_iterator it{ begin(s), end(s), expr }, itEnd;

std::for_each( it, itEnd, []( const boost::smatch& m ){
  std::cout << m[1] << '\n' << m[2] << std::endl;
});
Örnek
Şöyle yaparız.
using Key = std::string;
using RawValue = std::string;
using Settings = std::map<Key, RawValue>;

std::string const input = ...;
Settings settings;

boost::regex re(R"((\w+)\(('.*?')\))");
auto f = boost::make_regex_iterator(input, re);

for (auto& match : boost::make_iterator_range(f, {})) {
  settings.emplace(match[1].str(), match[2].str());
}

Hiç yorum yok:

Yorum Gönder