📄 rx++.h
字号:
// rx++
// A simple C++ regexp class based on the
// GNU RX library
#ifndef __RXPLUS_H
#define __RXPLUS_H
#include "regexp.h"
const int _NM_ = 20;
class Regexp {
private:
regex_t m_rx;
int m_ret;
char* m_str;
regmatch_t* m_rm;
bool m_advance;
public:
Regexp(char *pat = NULL, int flags = 0) {
m_advance = false;
m_ret = regcomp(&m_rx,pat,flags);
m_rm = new regmatch_t[_NM_];
}
~Regexp() {
regfree(&m_rx);
delete m_rm;
}
bool is_ok() { return m_ret == 0; }
void set_str(char *str) { m_str = str; m_advance = false; }
bool match(char *str, int flags = 0)
{
m_str = str;
m_ret = regexec(&m_rx,m_str,_NM_,m_rm,flags);
return m_ret == 0;
}
bool match(const string& s, int flags = 0)
{ return match(s.c_str(),flags); }
int index(int idx = 0) {
return m_rm[idx].rm_so;
}
int end_match(int idx = 0) {
return m_rm[idx].rm_eo;
}
bool next_match(int flags = 0)
{
if (m_advance) m_str += end_match(0);
m_ret = regexec(&m_rx,m_str,_NM_,m_rm,flags);
m_advance = m_ret == 0;
return m_advance;
}
bool operator= (char *p) { return match(p); }
bool operator= (const string& s) { return match(s); }
string matched(int idx = 0)
{
int start = index(idx);
int finish = end_match(idx);
if (start == -1) return "";
string s = m_str;
return s.substr(start,finish - start);
}
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;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -