Plaster

common-lisp
(defmacro let-named-registers (regexp target &body body) (let* ((cl-ppcre:*allow-named-registers* t) (parse-tree (cl-ppcre:parse-string regexp)) (named-registers (multiple-value-bind (scanner register-names) (cl-ppcre:create-scanner parse-tree) (declare (ignore scanner)) register-names)) ignored-gensyms) `(cl-ppcre:register-groups-bind ,(loop :for name :in named-registers :collect (if name (intern (string-upcase name)) (car (push (gensym "ANONREGISTER") ignored-gensyms)))) (',parse-tree ,target) (declare (ignore ,@ignored-gensyms)) ,@body)))