Le nombre de barres obliques inverses dont mes regexps ont besoin est assez fou. Elisp a-t-il des littéraux regexp, donc je peux écrire quelque chose comme
rx"some\(regexp\)"
au lieu de
"some\\(regexp\\)"
Le nombre de barres obliques inverses dont mes regexps ont besoin est assez fou. Elisp a-t-il des littéraux regexp, donc je peux écrire quelque chose comme
rx"some\(regexp\)"
au lieu de
"some\\(regexp\\)"
Réponses:
Une option consiste à utiliser la rx
macro pour construire vos expressions à l'aide de sexps.
Votre exemple devient (rx "some" (group "regexp"))
Voici quelques autres exemples de la section des commentaires dans rx.el, pour avoir une idée du rx
fonctionnement:
Cela ^;;\\s-*\n\\|^\n
devient
(rx (or (and line-start ";;" (0+ space) ?\n)
(and line-start ?\n)))
Cela [ \t\n]*:\\([^:]+\\|$\\)
devient
(rx (and (zero-or-more (in " \t\n")) ":"
(submatch (or line-end (one-or-more (not (any ?:)))))))
rx
syntaxe, ce qui les rend plus faciles à maintenir. À mon humble avis , pour des cas similaires, la syntaxe rx en elle-même fait d'elisp un substitut digne de ce nom pour le python perl, le rubis, etc. Merci.
Non, il n'a pas de littéraux regexp, mais beaucoup trouvent pcre2el comme une alternative utile.
En l'utilisant spécifiquement à partir d'Elisp comme ceci:
(rxt-pcre-to-elisp "(abc|def)\\w+\\d+")
;; => "\\(\\(?:abc\\|def\\)\\)[_[:alnum:]]+[[:digit:]]+"
\\|
,\\(
et\\)
. Malheureusement, dans de nombreux thèmes, cela n'est pas visible. Vous pouvez remplacerfont-lock-regexp-grouping-backslash
etfont-lock-regexp-grouping-construct
rendre cela plus distinct.