Die bloße Anzahl von Backslashes, die meine Regexps benötigen, ist ziemlich verrückt. Hat elisp regexp Literale, so dass ich sowas schreiben kann
rx"some\(regexp\)"
Anstatt von
"some\\(regexp\\)"
Die bloße Anzahl von Backslashes, die meine Regexps benötigen, ist ziemlich verrückt. Hat elisp regexp Literale, so dass ich sowas schreiben kann
rx"some\(regexp\)"
Anstatt von
"some\\(regexp\\)"
Antworten:
Eine Möglichkeit besteht darin, das rx
Makro zu verwenden, um Ihre Ausdrücke mit Sexps zu konstruieren.
Dein Beispiel wird (rx "some" (group "regexp"))
Hier sind einige weitere Beispiele aus dem Kommentarbereich in rx.el, um eine Vorstellung davon zu bekommen, wie es rx
funktioniert:
Das ^;;\\s-*\n\\|^\n
wird
(rx (or (and line-start ";;" (0+ space) ?\n)
(and line-start ?\n)))
Das [ \t\n]*:\\([^:]+\\|$\\)
wird
(rx (and (zero-or-more (in " \t\n")) ":"
(submatch (or line-end (one-or-more (not (any ?:)))))))
Nein, es gibt keine regulären Ausdrücke, aber für viele ist pcre2el eine hilfreiche Alternative.
Verwenden Sie es speziell von Elisp wie folgt:
(rxt-pcre-to-elisp "(abc|def)\\w+\\d+")
;; => "\\(\\(?:abc\\|def\\)\\)[_[:alnum:]]+[[:digit:]]+"
\\|
,\\(
, und\\)
. Leider ist dies in vielen Themen nicht sichtbar. Sie können dies überschreibenfont-lock-regexp-grouping-backslash
undfont-lock-regexp-grouping-construct
deutlicher machen.