4 Haziran 2018 Pazartesi

std::regex_match metodu

Giriş
Bu metodu kullanmak için şu satır dahil edilir.
#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>
Açıklamasını boost'tan aldım ancak std::regex_match için de geçerli.
The algorithm regex_match determines whether a given regular expression matches all of a given character sequence denoted by a pair of bidirectional-iterators, the algorithm is defined as follows, the main use of this function is data input validation.
String'in tamamının verilen regex'e uyup uymadığını true veya false olarak döner. C#'taki Regex.IsMatch() ile aynıdır. İlk parametre doğrulanacak string, ikinci parametre ise düzenli ifadedir.

regex_match - string + regex + smatch
bool döner. Eşleşme olup olmadığını döner, ayrıca sonuçları yakalayabilmemizi sağlar. Java'da şöyle yaparız.
Pattern p = Pattern.compile("^[\\w._]+@\\w+\\.[a-zA-Z]+$");
boolean matched = p.matcher("abcd_ed123.t12y@haha.com").matches();
Örnek
Şöyle yaparız.
std::string str;

std::regex reg (R"regex((\d+)([GMKgmk]){0,1})regex");
std::smatch match;
bool matched = std::regex_match(str, match, reg);
if(matched) {
  ...
}
Örnek
Şöyle yaparız.
const regex reg("([^:]+):([[:digit:]]+)");
smatch match;
if(regex_match(str, match,reg)) 
{
  cout << "ip: " << match[1] << " port: " << match[2] << endl;
}   
regex_match metodu - iterator + regex
İmzası şöyle. Sadece eşleşme olup olmadığını döner.
template <class BidirectionalIterator, class charT, class traits>
bool regex_match(BidirectionalIterator first, BidirectionalIterator last,
                 const basic_regex<charT, traits> & e,
                 regex_constants::match_flag_type flags =
                 regex_constants::match_default);
regex_match metodu - string + regex
Şöyle yaparız. Sadece eşleşme olup olmadığını döner.
#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main() {
  regex e("1");
  string s = "1,";
 
  cout << regex_match("1", e) << endl; //true
  cout << regex_match(s, e) << endl;   // true

  return 0;
}
Şöyle yaparız. Sadece eşleşme olup olmadığını döner.
#include <regex>

std::string str = "11111111111";

if (false == std::regex_match(str, std::regex("[-0-9]+")))
{
  std::cout << "Invalid Phone Number!\n";
}
Boost
Aynı örneği boost ile de birebir yapabiliriz.
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main() {
  boost::regex e("1");

  if(boost::regex_match("1", regex_bb01))
    std::cout<<"the regex matched\n";
}



Hiç yorum yok:

Yorum Gönder