Aslında dört farklı re-builder
sözdizimi seçeneği var ve aralarında geçiş yapabilirsiniz.C-cTAB
Bunlardan ikisi sexp formlu regexp derleyicileri içindir rx
ve sregex
(eski eskisi daha kapsamlı ve neredeyse tamamen sözdizimi uyumlu olduğundan, kullanılan eski kodla çalışmadığınız sürece sregex'i gerçekten görmezden gelebilirsiniz).
Diğer iki sözdizimi seçeneği read
(varsayılan) ve string
(etkileşimli olarak kullandığınız sözdizimidir).
read
Sözdizimi 'kod' sözdizimi - yani lisp okuyucu tarafından tanınan olarak - Eğer uyarınca Regexp'i girmek ettiği dizeleri okuma sözdizimi :
C-hig (elisp) Syntax for Strings
RET
string
(Ben her zaman bu bağlamda gereksiz kafa karıştırıcı adı kabul ettik) sözdizimi Normal ifade dize sözdizimi zaten okundu zaman gerektirdiği çıkış ve hangi nedenle karakterin herhangi yoktur yazma dize. Söylemek istediğim, bu gerçek düzenli ifade sözdizimidir, Emacs etkileşimli olarak sorulduğunda kullandığınız gibi.
Dize sözdizimini varsayılan olarak kullanmak istiyorsanız, init dosyanıza aşağıdakileri ekleyin veya kullanın. M-x customize-option
RET reb-re-syntax
RET
(setq reb-re-syntax 'string)
Regexp düzenlerken veri kaybı olmadan okuma ve dize sözdizimi arasında geçiş yapabileceğinizi unutmayın. Ayrıca geçiş yapabilirsiniz dan (; dizeleri sexps derleme olan kütüphaneler için ne olduğunu doğal olarak), ancak diğer yönde gidip bir dizesinden bir sexp üretemez / dize sözdizimi okumak için sexp formları. re-oluşturucu sexp'in ne olduğunu hatırlar, böylece sentaksı değiştirdiğinde bu formu kaybetmezsin ; ancak regexp'i farklı bir sözdiziminde değiştirir ve sonra geri dönerseniz güncellenmez. Kısacası, regexp'i bir sexp olarak oluşturuyorsanız, yalnızca bu sözdizimini kullanırken düzenlemeyi yaptığınızdan emin olun .
A yakaladım rx
desteği aslında kullanıyor olmasıdır rx-to-string
kullanarak oldukça özdeş değildir işlevini rx
kodunda makro. rx
isteğe bağlı sayıda form argümanını kabul eder ve bunları zımni bir sıra olarak rx-to-string
kabul eder , oysa yalnızca tek bir formu kabul eder ve herhangi bir üst düzey sıra açıkça '(sequence ...)
veya eşdeğeri ile yapılmalıdır .
Bir formu girdiğinizde Kısacası, '(...)
yeniden oluşturucu, o kadar işlenir (rx-to-string '(...))
ve(rx ...)
Ayrıca, geçersiz bir formun re-builder
, form yeniden geçerli hale getirildikten sonra bile, ilişkili arabellekteki eşleşmeleri dinamik olarak güncellemenin durmasına neden olabileceğini unutmayın . İçin C-cC-ubağlayıcı reb-force-update
, bu durumları çözmek için kullanışlıdır.
Varsayılan olarak mod hat gösterileri "RE Oluşturucu" seçeneğini kullanarak read
veya string
sözdizimi ve "RE Oluşturucu Lisp" seçeneğini kullanarak rx
veya sregex
sözdizimi, ama çok daha kullanışlı tanımlamak gibi görünüyor belirli kullanımda sözdizimi (özellikle ayırt etmek read
ve string
).
delight
Paketi GNU ELPA'dan yüklerseniz , mod satırına bir sözdizimi göstergesi eklemek için aşağıdakileri kullanabilirsiniz.
(let ((name '("Regexp[" (:eval (symbol-name reb-re-syntax)) "]")))
(delight `((reb-mode ,name :major)
(reb-lisp-mode ,name :major))))
Bu, mod adını read
sözdiziminde "Regexp [read]" olarak değiştirir ve benzer şekilde diğerleri için de geçerlidir.
Veya yukarıda açıklanan rx
vs rx-to-string
getcha için bir ipucu eklemek için , rx
sözdizimini kullanırken mod satırının "Regexp [rx-to-string]" deyin :
(let ((name '("Regexp["
(:eval (symbol-name (if (eq reb-re-syntax 'rx)
'rx-to-string
reb-re-syntax)))
"]")))
(delight `((reb-mode ,name :major)
(reb-lisp-mode ,name :major))))