Elisp regexps ^ ve $ vs `ve '


16

Manuel açıklar regexp'in özel karakterleri ^ve $. Bildiğim çoğu normal ifade lehçesinde olduğu gibi, bir dizenin başlangıcı veya sonu ile eşleşiyor gibi görünüyorlar. Ancak, kullanılabilir karakterler `ve 'karakterler olduğunu da keşfettim . Burada bulunan açıklamaya göre , dizelerin başlangıcı veya bitişi ile de eşleşiyor gibi görünüyorlar. Birisi bu özel karakterler arasındaki farkı, bunları ne zaman kullanacağınıza ilişkin bir örnek ve öneri ile açıklayabilir mi?

Ben değerine baktığınızda, auto-mode-alistdizelerin sonuna uygun olarak birbirlerinin yerine kullanılır gibi görünüyor:

(...
 ("\\.scss\\'" . scss-mode)
 ("\\.ya?ml$" . yaml-mode)
...)

2
İnsanlar bu şekilde kullandıklarında $, yeni satırlar içermeyen dosya adlarını kullanırlar. Bu genellikle (çok) güvenli bir varsayım olacaktır, ancak garanti edilmez . Bu \\'nedenle kullanmak en iyi uygulamadır.
phils

Yanıtlar:


14

Dizeniz gömülü bir yeni satır karakterine sahip olabilir; bu durumda \'dizenin sonuyla $eşleşir ancak yeni satır karakterinden hemen önce eşleşir.

Elisp kılavuzunu, Regexp Special düğümü'nü alıntılamak için :

Arabellek yerine bir dize eşleştirilirken, dizenin sonunda veya yeni satır karakterinden önce `$ 'eşleşir.

Benzer şekilde, \`dizenin başlangıcıyla eşleşir, ancak ^yeni satır karakterinden hemen sonra eşleşir. Yine, kılavuz:

Arabellek yerine bir dize eşleştirilirken, dizenin başında veya yeni satır karakterinden sonra `^ 'eşleşir.

Bu nedenle, dizeler için genellikle kullanmak istersiniz \`ve \'özellikle kodunuz önceden dizede yeni satır karakterleri olup olmadığını bilemezse. Bir arabellekteki metin için genellikle ^ve kullanırsınız $.


6
(string-match "^foo" "foo")         ; => 0
(string-match "\\`foo" "foo")       ; => 0
(string-match "^foo" "bar\nfoo")    ; => 4
(string-match "\\`foo" "bar\nfoo")  ; => nil

(string-match "foo$" "foo")         ; => 0
(string-match "foo\\'" "foo")       ; => 0
(string-match "foo$" "foo\nbar")    ; => 0
(string-match "foo\\'" "foo\nbar")  ; => nil

^ve satırların$ başlangıcını ve sonunu eşleştirin .

\`ve tüm dizenin\' başlangıç ​​ve bitişiyle eşleşir .


2
there are ` and ' characters available. [...] they seem to also match the start or end of strings

Özel karakterler şunlardır: . * + ? ^ $ \ [.

Parantezler arasında []aşağıdakiler de özeldir:] - ^

Backtick `` ve single quote '' dahil olmak üzere birçok karakter bir ters eğik çizgi izlediklerinde özel olur. Daha fazla ayrıntı için buraya bakın.

Could someone please explain the difference between these special characters, with an example and recommendation on when to use them?

Orada arasında bir fark olduğunu beginning of stringve beginning of each line in the string.

Ergoemacs'ın izniyle. Daha fazlasını buradan okuyabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.