/* REGULAR EXPRESSION CONSTRUCTION MACROS * * $Id: re.h,v 1.2 2022/02/03 20:19:38 oj14ozun Exp $ * * Inspired by and a weak immiation of Emacs Lisp's rx * macro. */ #define or(re, er) "(?:" re "|" er ")" #define maybe(re) "(?:" re ")?" #define multi(re) "(?:" re ")+" #define many(re) "(?:" re ")*" #define wmulti(re) "(?:" re ")+?" #define wmany(re) "(?:" re ")*?" #define repeat(re, n) "(?:" re "){" #n "}" #define multiple(re, n, m) "(?:" re "){" #n "," #m "}" #define most(re, n) "(?:" re "){," #n "}" #define least(re, n) "(?:" re "){" #n ",}" #define class(name) "[:" #name ":]" #define group(re) "(" re ")" #define any(chars) "[" #chars "]" #define not(chars) "[^" #chars "]" #define bol "^" #define eol "$" #define anything "." /* Examples: * * multi(class(blank)) eol * * ~> (?:[:blank:])+$ * * bol or(many(class(blank)) eol, "a" least("b", 4) multi(anything) eol) * * ~> ^(?:(?:[:blank:])*$|a(?:b){4,}(?:.)+$) */