Le manuel décrit les caractères spéciaux regexp ^
et $
. Comme dans la plupart des dialectes d'expression régulière que je connais, ils semblent correspondre au début ou à la fin d'une chaîne. Cependant, j'ai également découvert qu'il existe des personnages `
et '
disponibles. Sur la base des explications trouvées ici , elles semblent également correspondre au début ou à la fin des chaînes. Quelqu'un pourrait-il expliquer la différence entre ces caractères spéciaux, avec un exemple et une recommandation sur le moment de les utiliser?
Quand je regarde la valeur de auto-mode-alist
, ils semblent être utilisés de manière interchangeable pour correspondre à la fin des chaînes:
(...
("\\.scss\\'" . scss-mode)
("\\.ya?ml$" . yaml-mode)
...)
elisp
regular-expressions
Jackson
la source
la source
$
comme ça, ils misent sur des noms de fichiers ne contenant pas de nouvelles lignes. Cela va généralement être une hypothèse (très) sûre, mais ce n'est pas garanti . L'utilisation\\'
est donc la meilleure pratique.Réponses:
Votre chaîne peut avoir un caractère de nouvelle ligne incorporé, auquel cas
\'
correspond à la fin de la chaîne mais$
correspond juste avant le caractère de nouvelle ligne.Pour citer le manuel Elisp, node Regexp Special :
De même,
\`
correspond au début de la chaîne, mais^
correspond juste après le caractère de nouvelle ligne. Encore une fois, le manuel:Donc, pour les chaînes que vous souhaitez généralement utiliser
\`
et\'
, surtout si votre code ne peut pas savoir à l'avance s'il peut y avoir des caractères de nouvelle ligne dans la chaîne. Pour le texte dans un tampon, vous utilisez généralement^
et$
.la source
^
et faire$
correspondre le début et la fin des lignes .\`
et faire\'
correspondre le début et la fin de la chaîne entière .la source
Les caractères spéciaux sont:
. * + ? ^ $ \ [
.Entre parenthèses
[]
, les éléments suivants sont également spéciaux:] - ^
De nombreux personnages, y compris le backtick `et le guillemet simple ', deviennent spéciaux lorsqu'ils suivent une barre oblique inverse. Voir ici pour plus de détails.
Il y a une différence entre
beginning of string
, etbeginning of each line in the string
.Avec l'aimable autorisation d'Ergoemacs. Vous pouvez en lire plus ici
la source