Philipp Stephani schrieb am Fr., 17. Nov. 2017 um 21:12 Uhr: > > $ emacs -Q -batch -eval '(progn (string-match "^\\(a\\)?\\(b\\)\\(c\\)?$" > "b") (print (match-data)))' > (0 1 nil nil 0 1) > > Note that neither the `a` nor the `c` group matched, but there are > entries for `a` in `match-data`, but not for `c`. This makes working > with the match data unnecessarily hard because its length depends on > whether certain optional groups have matched or not. I haven't seen any > discussion about this behavior in either the manual or the docstring. I > think the match data in this case should be (0 1 nil nil 0 1 nil nil). > > It turns out that this is harder than I expected, because the information about the number of groups in the pattern isn't stored anywhere, and search_regs.num_regs may be different from the group count. If it turns out too hard to fix, the behavior should at least be documented.