Похоже, вы пытаетесь сделать отрицательный прогноз. то есть вы пытаетесь прекратить сопоставление, как только достигнете некоторого разделителя.
Emacs не поддерживает просмотр вперед напрямую, но поддерживает нежадную версию *, + и ? операторы (*?, +?, ??), которые в большинстве случаев можно использовать с той же целью.
Так, например, чтобы соответствовать телу этой функции javascript:
bar = function (args) {
if (blah) {
foo();
}
};
Вы можете использовать это регулярное выражение emacs:
function ([^)]+) {[[:ascii:]]+?};
Здесь мы останавливаемся, когда находим последовательность из двух элементов «};». [[:ascii:]] используется вместо "." оператор, потому что он работает с несколькими строками.
Это немного отличается от отрицательного просмотра вперед, потому что }; сама последовательность, с которой она совпала, однако, если ваша цель состоит в том, чтобы извлечь все до этого момента, вы просто используете группу захвата \( и \).
См. руководство по регулярным выражениям emacs: http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html
В качестве примечания: если вы пишете какое-либо регулярное выражение emacs, обязательно вызовите M-x re-builder, который вызовет небольшую IDE для написания вашего регулярного выражения для текущего буфера.
person
catphive
schedule
30.03.2013