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 rxmacro 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 rxfonctionnement:
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 ?:)))))))
rxsyntaxe, 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-backslashetfont-lock-regexp-grouping-constructrendre cela plus distinct.