Sama liczba odwrotnych ukośników, których wymagają moje wyrażenia regularne, jest dość szalona. Czy elisp ma literały regularne, więc mogę napisać coś takiego
rx"some\(regexp\)"
zamiast
"some\\(regexp\\)"
Sama liczba odwrotnych ukośników, których wymagają moje wyrażenia regularne, jest dość szalona. Czy elisp ma literały regularne, więc mogę napisać coś takiego
rx"some\(regexp\)"
zamiast
"some\\(regexp\\)"
Odpowiedzi:
Jedną z opcji jest użycie rx
makra do konstruowania wyrażeń za pomocą sexps.
Twój przykład staje się (rx "some" (group "regexp"))
Oto kilka innych przykładów z sekcji komentarzy w rx.el, aby dowiedzieć się, jak to rx
działa:
To się ^;;\\s-*\n\\|^\n
staje
(rx (or (and line-start ";;" (0+ space) ?\n)
(and line-start ?\n)))
To się [ \t\n]*:\\([^:]+\\|$\\)
staje
(rx (and (zero-or-more (in " \t\n")) ":"
(submatch (or line-end (one-or-more (not (any ?:)))))))
rx
składnię, która ułatwia ich obsługę. Imho, dla podobnych przypadków, sama składnia rx sprawia, że elisp jest godnym substytutem języka Python w języku Perl, ruby itp. Dziękujemy.
Nie, nie ma wyrażeń regularnych , ale wielu uważa pcre2el za pomocną alternatywę.
Używając go w szczególności z elisp:
(rxt-pcre-to-elisp "(abc|def)\\w+\\d+")
;; => "\\(\\(?:abc\\|def\\)\\)[_[:alnum:]]+[[:digit:]]+"
\\|
,\\(
i\\)
. Niestety w wielu motywach nie jest to widoczne. Możesz zastąpićfont-lock-regexp-grouping-backslash
ifont-lock-regexp-grouping-construct
uczynić to bardziej wyraźnym.