14.4. Recherche d'Expressions Rationnelles

Une expression rationnelle ("regular expression" ou regexp, pour raccourcir) est un motif qui dénote une classe de chaînes alternatives pouvant correspondre, dont le nombre peut être infini. Dans GNU Emacs, vous pouvez rechercher la prochaine correspondance d'une regexp, de façon incrémentale ou pas.

Une recherche incrémentale d'une regexp est faite en tapant C-M-s (isearch-forward-regexp). Cette commande lit une chaîne de recherche incrémentalement exactement comme C-s, mais elle traite la chaîne de recherche comme une regexp plutôt que d'en chercher une correspondance exacte dans le texte du tampon. Chaque fois que vous ajoutez du texte à la chaîne de recherche, vous rendez la regexp plus longue, et la nouvelle regexp est utilisée pour une nouvelle recherche. L'appel de C-s avec un argument préfixe (sa valeur n'a pas d'importance) est un autre moyen de faire une recherche incrémentale d'une regexp en avant. Pour rechercher en arrière dans le tampon, utilisez C-M-r (isearch-backward-regexp) ou C-r avec un argument préfixe.

Tous les caractères de contrôle qui ont un comportement spécial durant une recherche incrémentale ordinaire ont la même fonction durant une recherche incrémentale d'une regexp. Taper C-s ou C-r immédiatement après avoir commencé la recherche recommence la dernière recherche incrémentale de regexp ; toutefois, les recherches incrémentales de regexp et normales ont des valeurs par défaut indépendantes. Elles ont aussi des anneaux de recherche séparés que vous pouvez accéder avec M-p et M-n.

Si vous tapez SPC durant une recherche incrémentale de regexp, il correspond à toute séquence de caractères blancs, caractère newline inclus. Si vous voulez spécifier la correspondane à un unique espace, tapez C-q SPC.

Notez que d'ajouter des caractères à la regexp durant la recherche incrémentale de regexp peut faire revenir le curseur en arrière et recommencer. Par exemple, si vous avez recherché foo et que vous ajoutez \|bar, le curseur repart en arrière dans le cas où le premier bar précède le premier foo.

Une recherche non incrémentale d'une regexp est faite par les fonctions re-search-forward et re-search-backward. Vous pouvez les invoquer avec M-x, ou les relier à des touches, ou encore les invoquer par le biais des recherches incrémentales de regexp avec C-M-s RET et C-M-r RET.

Si vous utilisez les commandes de recherche incrémentales de regexp avec un argument préfixe, elles effectuent une recherche de chaîne ordinaire, comme isearch-forward et isearch-backward. Section 14.1.