Il semble que vous essayiez de faire un lookahead négatif. c'est-à-dire que vous essayez d'arrêter de correspondre une fois que vous avez atteint un délimiteur.
Emacs ne prend pas en charge la fonction de recherche directe, mais il prend en charge la version non gourmande de *, + et? opérateurs (* ?, + ?, ??), qui peuvent être utilisés dans le même but dans la plupart des cas.
Ainsi, par exemple, pour correspondre au corps de cette fonction javascript:
bar = function (args) {
if (blah) {
foo();
}
};
Vous pouvez utiliser cette emacs regex:
function ([^)]+) {[[:ascii:]]+?};
Ici nous arrêter une fois que nous trouvons les deux séquences d'éléments "};" [[: ascii:]] est utilisé instad du "." opérateur car il fonctionne sur plusieurs lignes.
Ceci est un peu différent de lookahead négatif parce que le}; séquence elle-même correspondait, cependant si votre objectif est d'extraire tout jusqu'à ce point, vous utilisez simplement un groupe de capture \ (et \).
Voir le emacs manuel regex: http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html
Comme une note de côté, si vous écrire tout type de emacs regex, assurez-vous d'invoquer Mx re-constructeur, qui apportera un peu IDE pour écrire votre regex contre le tampon courant.
Je pense que c'est GNU ERE. – Gumbo
@Gumbo. vous avez raison, merci – Anycorn
Cliquez sur le "regex-negation" tag pour voir des questions similaires. – finnw