Vi'de Normal İfade: Grup içi karakter sınıfları nasıl kullanılır? (örneğin [\ s \ w])


15

Vim'de karakter sınıfı \sherhangi bir boşluk karakteriyle eşleşir. Bu özel karakterleri gruplar halinde kullandığımda, örneğin [\s\w]herhangi bir boşluk veya kelime karakteriyle eşleşmiyorsa, eşleşir sveya w.

Gruplarda karakter sınıfları nasıl kullanılır?


8
Düzenli ifade motorlarının bazı uygulamalarından farklı olarak, Vim's bu gösterimi desteklemiyor gibi görünüyor. [[:space:][:alnum:]_]toplanmasını yaklaşmak için kullanılabilir \sve \wolsa.
Peter Lewerin

@PeterLewerin Lütfen bir cevap olarak gönderin.
Christopher Bottoms

@ChristopherBottoms: bitti.
Peter Lewerin

Yanıtlar:


11

Yani bir dizi var, bir grup değil ve (o örn, diğer regex uygulamalarda mümkün olsa Vim karakter sınıflarını kullanamazsınız piton ). Bunun yerine bir alternatif kullanmanız gerekir:

/\(\w\|\s\)

veya:

/\v(\s|\w)

(veya Peter Lewerin tarafından önerilen çözüm ).


2
Kişinin bir karakter sınıfında geçersiz bir aralık oluşturabilmesi, bir karakter sınıfındaki gibi \sbir şey kullanmanın mümkün olmaması gerektiği anlamına gelmez . Vim'in normal ifade uygulamasında bu seçim yapılmış ancak diğer uygulamalar kullanmanıza izin veriyor [\s].
jamessan

@VanLaser Bu bilgi ile cevabı düzenlerseniz ([\ s] diğer normal ifadelerde bir olasılıktır ama vim içinde değil) cevabınızı kabul edeceğim!
John HK

(tamam, eklendi)
VanLaser

11

Düzenli ifade motorlarının bazı uygulamalarından farklı olarak, Vim's [\s\w]koleksiyonlarda bu gösterimi ( ) desteklemiyor gibi görünüyor . Yine de POSIX karakter sınıfı ifadeleri kullanılabilir .

  • [:blank:]ile aynıdır \s.
  • [:space:]boşluk karakterlerinden daha fazla sayıda karakterle eşleşiyor \sve eşdeğer gibi görünüyor \_s.
  • [:alnum:]yaklaşık \w, ancak alt çizgi ( _) ile eşleşmiyor .

Böylece istediğiniz koleksiyon [[:blank:][:alnum:]_]veya olarak yazılabilir [[:space:][:alnum:]_].

Ben test ederek bu doğrulanmadı, ancak bunun belgelenmiştir :h regexp, :h /character-classesve :h /collection.

Taşınabilirlik notu: Diğer normal regex motorlarda, \sgenellikle Vim'deki [:space:](veya \_s) ile aynıdır .

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.