Il solo numero di backslash che la mia regexps richiede è piuttosto folle. Elisp ha letterali regexp, quindi posso scrivere qualcosa del genere
rx"some\(regexp\)"
invece di
"some\\(regexp\\)"
Il solo numero di backslash che la mia regexps richiede è piuttosto folle. Elisp ha letterali regexp, quindi posso scrivere qualcosa del genere
rx"some\(regexp\)"
invece di
"some\\(regexp\\)"
Risposte:
Un'opzione è usare la rx
macro per costruire le tue espressioni usando sexps.
Il tuo esempio diventa (rx "some" (group "regexp"))
Ecco un altro paio di esempi dalla sezione commenti in rx.el, per avere un'idea di come rx
funziona:
Questo ^;;\\s-*\n\\|^\n
diventa
(rx (or (and line-start ";;" (0+ space) ?\n)
(and line-start ?\n)))
Questo [ \t\n]*:\\([^:]+\\|$\\)
diventa
(rx (and (zero-or-more (in " \t\n")) ":"
(submatch (or line-end (one-or-more (not (any ?:)))))))
rx
sintassi, che li rende più facili da mantenere. Imho, per casi simili, la sintassi rx di per sé rende elisp un degno sostituto di perl python, ruby, ecc. Grazie.
No, non ha letterali regexp, ma molti trovano che pcre2el sia un'alternativa utile.
Specificamente usandolo da elisp in questo modo:
(rxt-pcre-to-elisp "(abc|def)\\w+\\d+")
;; => "\\(\\(?:abc\\|def\\)\\)[_[:alnum:]]+[[:digit:]]+"
\\|
,\\(
e\\)
. Sfortunatamente, in molti temi questo non è visibile. Puoi ignorarefont-lock-regexp-grouping-backslash
efont-lock-regexp-grouping-construct
rendere questo più distinto.