mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
84 lines
1.7 KiB
C
84 lines
1.7 KiB
C
|
|
// 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
|