unsigned String::replace(regex& expr, const char *cp, unsigned flags) { #ifdef HAVE_REGEX_H size_t cpl = 0; if(cp) cpl = strlen(cp); if(!str || str->len == 0) return 0; if(expr.match(str->text, flags)) return 0; ssize_t adjust = 0; unsigned member = 0; while(member < expr.members()) { ssize_t tcl = expr.size(member); ssize_t offset = (expr.offset(member) + adjust); if(!tcl) break; ++member; cut(offset, tcl); if(cpl) { paste(offset, cp); adjust += (cpl - tcl); } } return member; #else return 0; #endif }
void show_flags(const regex& rgx) { // extract and show flag values regex::flag_type flags = rgx.flags(); if ((flags & regex::ECMAScript) == regex::ECMAScript) cout << "ECMAScript"; else if ((flags & regex::basic) == regex::basic) cout << "basic"; else if ((flags & regex::extended) == regex::extended) cout << "extended"; else if ((flags & regex::grep) == regex::grep) cout << "grep"; else if ((flags & regex::egrep) == regex::egrep) cout << "egrep"; else if ((flags & regex::awk) == regex::awk) cout << "awk"; else cout << "unknown grammar"; if ((flags & regex::icase) == regex::icase) cout << " | icase"; if ((flags & regex::collate) == regex::collate) cout << " | collate"; if ((flags & regex::nosubs) == regex::nosubs) cout << " | nosubs"; if ((flags & regex::optimize) == regex::optimize) cout << " | optimize"; cout << '\n'; }
bool regex_match(const string & str, smatch & matches, const regex & re){ Poco::RegularExpression::MatchVec pocomatches; auto ret = re.match( str, 0, pocomatches ); matches.clear(); for(const auto & m: pocomatches){ matches.push_back(regmatch(str,m)); } return ret; }