(defun regex-render-ruby (regex sample) (with-temp-buffer (insert (format " line = DATA.read re = /%s/ print '(' pos = 0 while md=re.match(line,pos) printf '(%%d %%d', md.begin(0), md.end(0)-md.begin(0) puts md.captures.each_with_index{|c,i| printf '(%%d . %%s)', i+1,c.inspect } pos = md.end(0) puts ')' end print ')' __END__ %s" regex sample)) (insert (format "")) (call-process-region (point-min) (point-max) "ruby" t t) (goto-char (point-min)) (read (current-buffer)))) (defun regex-tool-emacs () (interactive) (setq regex-tool-backend 'emacs) (regex-tool)) (defun regex-tool-perl () (interactive) (setq regex-tool-backend 'perl) (advice-remove 'regex-render-perl 'regex-render-ruby) (regex-tool)) (defun regex-tool-ruby () (interactive) (setq regex-tool-backend 'perl) (advice-add 'regex-render-perl :override 'regex-render-ruby) (regex-tool))