14 Haziran 2017 Çarşamba

std::regex_search

Giriş
Şu satırı dahil ederiz.
include <regex>
C++11 ile gelen bu sınıflar çok faydalı. Eskiden GNU ile gelen C tarzı metodları kullanır ve şu satırı dahil ederdik.
#include <regex.h>
String'in bir kısmının verilen regex'e uyup uymadığını true veya false olarak döner. regex_search metodları iki gruba ayrılabilir.

1. Match Result Dönmeyen Metodlar
Bunlar en kolay metodlar. Sadece Çağrı sonucunun true veya false olması bizi ilgilendirir.

1.1 regex_search - iterator
Metodun imzası şöyle
template <class BidirectionalIterator, class charT, class traits>
bool regex_search(BidirectionalIterator first, BidirectionalIterator last,
                  const basic_regex<charT, traits> & e,
                  regex_constants::match_flag_type flags =
                  regex_constants::match_default);
1.2 regex_search - string
İlk parametre üzerinde dolaşılacak string, ikinci parametre ise aranılacak örüntüdür. Şöyle yaparız.

std::string example = "fifth\nsixth\nseventh\neighth\nninth";
std::cout << regex_search(example, std::regex("^s")) << endl;
Sonuç olarak false alırız.

Yanlış kullanımı şöyledir. Bu örnek derlenmez çünkü ikinci parametre std::regex yerine yanlışlıkla std::string olarak kullanılmaya çalışılıyor.
string regexCriteria1 = "...";
string test = "...";
regex_search( test, regexCriteria1 );

2. Match Result Dönen Metodlar

regex_search - string + smatch + regex
Örnek
std::string ile kullanımı şöyledir.
std::regex regexCriteria1 = "...";
std::string str = "...";
std::smatch searchResult;

regex_search( str, searchResult, regexCriteria1 );
Örnek
Şöyle yaparız.
unsigned int match_count( std::string str, const std::string& user_pattern ){
  unsigned int counter = 0;
  std::match_results< std::string::const_iterator > what;

  std::regex regex( user_pattern );

  while( std::regex_search( str, what, regex ) ){
    str = what.suffix().str();
    ++counter;
  }

  return counter;
}


regex_search - iterator + iterator + smatch + regex
Örnek
iterator ile kullanımı şöyledir.
std::regex r = "...";
std::string str = "...";
std::smatch searchResult;

regex_search (str.begin(), str.end(), searchResult, r );
Eğer istenirse regex_search döngü içinde de kullanılabilir. Bu durumda başlangıç konumunu ilerletmek gerekir.

Hiç yorum yok:

Yorum Gönder