/** @file $Id$ $Date$ $Author$ @copy © Marc Wäckerlin @license LGPL, see file COPYING $Log$ Revision 1.2 2004/12/16 13:09:31 marc possibility to evaluate and extract sub expressions Revision 1.1 2004/12/14 20:20:30 marc initial version */ #include #include #include namespace mrw { RegExp::RegExp(const std::string& pattern, bool hassub, int flags) : _hassub(hassub) { if (flags&nosub) throw mrw::invalid_argument("nosub"); if (regcomp(&_regex, pattern.c_str(), (_hassub?flags:(flags|nosub)))) throw mrw::invalid_argument(pattern); } RegExp::~RegExp() noexcept { regfree(&_regex); } bool RegExp::operator()(const std::string& text) { if (_hassub) return !regexec(&_regex, (_text=text).c_str(), MAX_SUB, _sub, 0); else return !regexec(&_regex, text.c_str(), 0, 0, 0); } std::string RegExp::operator[](unsigned int n) const { if (!_hassub) throw mrw::invalid_argument("initialized with no sub expressions"); if (n>=MAX_SUB || _sub[n].rm_so<0 || _sub[n].rm_eo<0) throw mrw::invalid_argument(mrw::string(n)); return _text.substr(_sub[n].rm_so, _sub[n].rm_eo-_sub[n].rm_so); } }