Yanıtlar:
Metakarakter \b
, şapka ve dolar işareti gibi bir çapadır. "Sözcük sınırı" adı verilen bir konumda eşleşir . Bu eşleşme sıfır uzunluktadır.
Kelime sınırları olarak nitelendirilen üç farklı pozisyon vardır:
Basitçe ifade etmek gerekirse: şeklinde bir ifadeyi kullanarak "sadece tam kelimeler" araması \b
yapmanızı sağlar . Bir "kelimesi karakteri" kelime oluşturacak şekilde kullanılabilecek bir karakterdir. Olmayan tüm karakterler "kelimesi karakterler" olan "sözcük olmayan karakterler" .\bword\b
Tüm tatlarda, karakterler [a-zA-Z0-9_]
kelime karakteridir. Bunlar aynı zamanda kısa el karakter sınıfı ile de eşleştirilir \w
. Lezzet karşılaştırmasında kelime sınırları için "ascii" gösteren lezzetler, sadece kelime karakterleri olarak tanınırlar.
\w
genellikle "kelime karakteri" anlamına gelir [A-Za-z0-9_]
. Alt çizgi ve rakamların dahil edildiğine dikkat edin.
\B
'nin ihmal edilmiş sürümüdür \b
. olmadığı \B
her pozisyonda eşleşir \b
. Etkili bir şekilde, \B
iki sözcük karakteri arasındaki herhangi bir konumda ve iki sözcük olmayan karakter arasındaki herhangi bir konumda eşleşir.
\W
için kısaltılmış, kısaltılmış [^\w]
sürümü \w
.
\w
bir kelime karakteriyle eşleşir. \b
, bir tarafında kelime karakteri olan bir konum karakteri ile diğer tarafında kelime karakteri olmayan bir şeyle eşleşen sıfır genişlikli eşlemedir. (Kelime karakteri olmayan şeylere örnek olarak boşluk, dizenin başlangıcı ve bitişi vb.)
\w
stoktaki a
, b
, c
, d
, e
, ve f
de "abc def"
\b
eşleşir (sıfır-genişlik) pozisyonu önce a
, sonra c
, daha önce d
ve daha sonra f
içinde"abc def"
\b
sıfır genişlikli bir iddia; bir karakterle eşleşmez , bir konumla eşleşir .
@Mahender, muhtemelen \W
(yerine \w
) ile arasındaki farkı kastediyordunuz \b
. Değilse, o zaman yukarıdaki @BoltClock ve @jwismar ile aynı fikirde olurdum. Aksi takdirde okumaya devam edin.
\W
herhangi bir kelime olmayan karakterle eşleşir ve bu nedenle kelime sınırlarını eşleştirmek için onu kullanmaya çalışmak kolaydır. Sorun, bir satırın başlangıcı veya bitişi ile eşleşmemesidir. \b
, bir satırın başlangıcı veya bitişiyle de eşleşeceğinden, kelime sınırlarını eşleştirmek için daha uygundur. Kabaca konuşmak gerekirse (daha deneyimli kullanıcılar beni burada düzeltebilir) \b
olarak düşünülebilir (\W|^|$)
. [Düzenle: aşağıdaki @ Ωmega'dan bahsedildiği gibi, \b
sıfır uzunluklu bir eşlemedir, bu yüzden (\W|^|$)
kesinlikle doğru değildir, ancak umarım farkın açıklanmasına yardımcı olur]
Hızlı örnek: dize için Hello World
, .+\W
eşleşir Hello_
(boşluk), ancak maç olmayacak World
. .+\b
her ikisiyle de eşleşir Hello
ve World
.
\b
aynı anlam (\W|^|$)
beri, (\W|^|$)
eşleştirme sonucu içeride olmayan bir kelime karakterle içerecektir. Bu gerçeği buradan kontrol edebilirsiniz => regexr.com/3qf98 .
\b
benim için, (?<=\W|^|$)
bir kalıptan önce kullanıldığında ve (?=\W|^|$)
bir kalıptan sonra kullanıldığında aynı anlama gelir . Ne konuştuğumu buradan kontrol edebilirsiniz => regexr.com/3qf9h . Sadece \b
burada çapa sonuçları ile karşılaştırın => regexr.com/3qf9t
\b <= this is a word boundary.
Bir kelime karakterinden sonra gelen, ancak bir kelime karakterinden önce gelmeyen veya bir kelime karakterinden önce gelen, ancak bir kelime karakterinden sonra gelmeyen bir konumla eşleşir.
\w <= stands for "word character".
Her zaman ASCII karakterleriyle eşleşir [A-Za-z0-9_]
Eşleştirmeye çalıştığınız belirli bir şey var mı?
Yeni başlayanlar için veya sadece iştahınızı ıslatmak için bazı yararlı regex web siteleri.
Bunu çok faydalı bir kitap olarak buldum:
\w
ASCII karakterlerine her zaman eşdeğer olmadığını hatırlamak yararlıdır [A-Za-z0-9_]
- ayrıca alfasayısal Unicode kod noktalarıyla da eşleşir ve yerel ayar uygun şekilde ayarlanırsa 8 bit ISO-Latin-1 karakterleriyle eşleşebilir .
\w
olduğu değil o alt çizgi dahil herhangi bir kelime karakterle, kibrit, bir kelime sınırı: [a-zA-Z0-9_]
. \b
ise : bir kelime sınırı olduğunu, bir kelime ve bir alfanümerik olmayan karakterin arasındaki konumu maçları \W
ya [^\w]
.
Ancak bu uygulamalar dilden dile değişebilir.
\w
kelime karakterini , kelime karakteri ile kelime olmayan karakter arasındaki\b
kelime sınırını temsil eder . Aynı şey değiller.