1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Add rx.el support for numbered groups (Bug#8776).

* lisp/emacs-lisp/rx.el (rx-constituents): Add support for numbered groups.
(rx-submatch-n): New function.
(rx): Document it.
This commit is contained in:
Chong Yidong 2011-06-18 17:12:33 -04:00
parent ddb8b596be
commit 6420d28b9a
3 changed files with 25 additions and 0 deletions

View file

@ -130,6 +130,8 @@
(** . (rx-** 2 nil)) ; SRE
(submatch . (rx-submatch 1 nil)) ; SRE
(group . submatch) ; sregex
(submatch-n . (rx-submatch-n 2 nil))
(group-n . submatch-n)
(zero-or-more . (rx-kleene 1 nil))
(one-or-more . (rx-kleene 1 nil))
(zero-or-one . (rx-kleene 1 nil))
@ -690,6 +692,16 @@ FORM is either `(repeat N FORM1)' or `(repeat N M FORMS...)'."
(mapconcat (lambda (re) (rx-form re ':)) (cdr form) nil))
"\\)"))
(defun rx-submatch-n (form)
"Parse and produce code from FORM, which is `(submatch-n N ...)'."
(let ((n (nth 1 form)))
(concat "\\(?" (number-to-string n) ":"
(if (= 3 (length form))
;; Only one sub-form.
(rx-form (nth 2 form))
;; Several sub-forms implicitly concatenated.
(mapconcat (lambda (re) (rx-form re ':)) (cddr form) nil))
"\\)")))
(defun rx-backref (form)
"Parse and produce code from FORM, which is `(backref N)'."
@ -1072,6 +1084,11 @@ CHAR
like `and', but makes the match accessible with `match-end',
`match-beginning', and `match-string'.
`(submatch-n N SEXP1 SEXP2 ...)'
`(group-n N SEXP1 SEXP2 ...)'
like `group', but make it an explicitly-numbered group with
group number N.
`(or SEXP1 SEXP2 ...)'
`(| SEXP1 SEXP2 ...)'
matches anything that matches SEXP1 or SEXP2, etc. If all