rx-to-string is the easiest way to build such an regexp.
C-h f rx
Do this
1. M-x ielm RET
2. Copy the below regexp to the prompt
(rx-to-string '(and (group-n 1 "<")
(group-n 2 (minimal-match
(zero-or-more anything)))
(group-n 3 ">")))
Here is a sample session.
,----
| ELISP> (rx-to-string '(and (group-n 1 "<")
| (group-n 2 (minimal-match
| (zero-or-more anything)))
| (group-n 3 ">")))
| "\\(?:\\(?1:<\\)\\(?2:\\(?:.\\|\n\\)*?\\)\\(?3:>\\)\\)"
`----
3. C-x b file.html
4. M-x reb-change-syntax RET read RET
5. M-x re-builder RET
6. Copy paste the above regexp in to *RE-Builder* buffer
7. You will see the various components highlighted in HTML buffer
8. M-x reb-change-syntax RET string RET
9. You will see the above regexp changed from read syntax to string
syntax. Something like. (Yes, the regexp is on two lines)
"\(?:\(?1:<\)\(?2:\(?:.\|
\)*?\)\(?3:>\)\)"
10. C-M-%
Copy the above regexp without surrounding double quotes RET
<\2> RET
You are done.
--