Если вы все еще заинтересованы, взгляните на cexp.el .
Это просто взлом, но, возможно, служит вашей цели.
Вы можете искать объединенные регулярные и сбалансированные выражения с помощью cexp-search-forward
.
Встроенный re-search-forward
используется для регулярных выражений, поэтому применяются правила синтаксиса. Сбалансированные выражения можно сопоставить с дополнительными элементами синтаксиса \!(
и \!)
.
Самым серьезным ограничением является то, что сбалансированные выражения могут не встречаться в группах. Таким образом, конструкция типа \!(^{ \(\!(^{.*}$\!)\)+ }$\!)
не работает из-за группы, содержащей внутреннее сбалансированное выражение.
Тем не менее, один полезный пример - сопоставление определений TeX, таких как
\def\mdo#1{{\def\next{\relax}\def\tmp{#1}\ifx\next\tmp\else\def\next{#1\mdo}\expandafter}\next}
с объединенными выражениями, такими как
\\def\\[[:alpha:]]+\(#[0-9]\)*\!(^{.*}$\!)
Поиск по cexp-search-forward с указанным выше cexp возвращает ограничения для следующих групп:
- Начало и конец полного матча
- Пределы соответствия для регулярного выражения перед сбалансированным выражением, т.е.
\def\mdo#1
- Пределы захваченной группы в первом регулярном выражении, т.е.
#1
- Пределы сбалансированного выражения, т. Е.
{{\def\next{\relax}\def\tmp{#1}\ifx\next\tmp\else\def\next{#1\mdo}\expandafter}\next}