rx++.h

来自「主要用于编译器/解释器中处理正则表达式的一个类。」· C头文件 代码 · 共 72 行

H
72
字号
// rx++
// A simple C++ regexp class based on the 
// GNU RX library

#ifndef __RXPLUS_H
#define __RXPLUS_H

// dynamically link to RX
#lib rx.dll
#include "regexp.h"
#lib

const int _NM_ = 20;
regmatch_t _rm_[_NM_];

class Regexp {
private:
  regex_t m_rx;
  int m_ret;
  char* m_str;

public:
  Regexp(char *pat = NULL, int flags = 0) {
     m_ret = regcomp(&m_rx,pat,flags);
  }

  ~Regexp() {
     regfree(&m_rx);
  }

  bool is_ok()
  { return m_ret == 0; }

  bool match(char *str, int flags = 0) {
    m_str = str;
    m_ret = regexec(&m_rx,str,_NM_,_rm_,flags);
    return m_ret == 0;
  }

  void get_error(string& err) {
   int len = regerror(m_ret,&m_rx,NULL,0); // how big is error string?
   char *buff = new char[len];
   regerror(m_ret,&m_rx,buff,len); // fetch the error...
   err = buff;
   delete buff;
  }

  bool match(const string& s, int flags = 0)
  { return match(s.c_str(),flags); }

  int index() {
     return _rm_[0].rm_so;
  }

  bool operator= (char *p)
  { return match(p); }

  bool operator= (const string& s)
  { return match(s); }

  string matched(int idx = 0)
  {
    if (_rm_[idx].rm_so == -1) return "";
    string s = m_str;
    int start = _rm_[idx].rm_so;
    int finish = _rm_[idx].rm_eo;
    return s.substr(start,finish - start);
  }
};

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?