Adakah yang bisa menjelaskan perbedaan antara \b
dan \w
metakarakter ekspresi reguler? Ini adalah pemahaman saya bahwa kedua metakarakter ini digunakan untuk batas kata. Selain itu, karakter meta mana yang efisien untuk konten multibahasa?
142
\w
mewakili karakter kata , sementara\b
mewakili batas kata antara karakter kata dan karakter non-kata. Mereka bukan hal yang sama.Jawaban:
Metacharacter
\b
adalah jangkar seperti tanda sisipan dan dolar. Ini cocok pada posisi yang disebut "batas kata" . Pertandingan ini panjangnya nol.Ada tiga posisi berbeda yang memenuhi syarat sebagai batasan kata:
Sederhananya:
\b
memungkinkan Anda melakukan pencarian "seluruh kata saja" menggunakan ekspresi reguler dalam bentuk\bword\b
. Sebuah "kata karakter" adalah karakter yang dapat digunakan untuk membentuk kata-kata. Semua karakter yang bukan "karakter kata" adalah "karakter non-kata" .Dalam semua rasa, karakter
[a-zA-Z0-9_]
adalah karakter kata. Ini juga dicocokkan dengan kelas karakter tangan pendek\w
. Rasa yang menunjukkan "ascii" untuk batas kata dalam perbandingan rasa hanya mengenali ini sebagai karakter kata.\w
singkatan dari "karakter kata" , biasanya[A-Za-z0-9_]
. Perhatikan dimasukkannya garis bawah dan digit.\B
adalah versi negasi dari\b
.\B
cocok di setiap posisi di mana\b
tidak. Secara efektif,\B
cocok di posisi mana pun di antara dua karakter kata serta di posisi mana pun di antara dua karakter non-kata.\W
adalah kependekan dari[^\w]
, versi negasi dari\w
.sumber
\w
cocok dengan karakter kata.\b
adalah kecocokan dengan lebar nol yang cocok dengan karakter posisi yang memiliki karakter kata di satu sisi, dan sesuatu yang bukan karakter kata di sisi lain. (Contoh hal yang bukan karakter kata termasuk spasi, awal dan akhir string, dll.)\w
pertandingana
,b
,c
,d
,e
, danf
dalam"abc def"
\b
pertandingan (zero-lebar) posisi sebeluma
, sesudahc
, sebelumd
, dan setelahf
di"abc def"
Lihat: http://www.regular-expressions.info/reference.html/
sumber
\b
pernyataan lebar nol; itu tidak cocok dengan karakter , itu cocok dengan posisi .@ Davidender, Anda mungkin memaksudkan perbedaan antara
\W
(bukan\w
) dan\b
. Jika tidak, maka saya akan setuju dengan @BoltClock dan @jwismar di atas. Kalau tidak, teruskan membaca.\W
akan cocok dengan karakter non-kata dan karenanya mudah digunakan untuk mencocokkan dengan batas kata. Masalahnya adalah bahwa itu tidak akan cocok dengan awal atau akhir suatu baris.\b
lebih cocok untuk mencocokkan batas kata karena juga akan cocok dengan awal atau akhir suatu baris. Secara kasar (pengguna yang lebih berpengalaman dapat memperbaiki saya di sini)\b
dapat dianggap sebagai(\W|^|$)
. [Sunting: seperti @ Ωmega menyebutkan di bawah ini,\b
adalah kecocokan dengan panjang nol sehingga(\W|^|$)
tidak sepenuhnya benar, tetapi mudah-mudahan membantu menjelaskan perbedaan]Contoh cepat: Untuk string
Hello World
,.+\W
akan cocokHello_
(dengan spasi) tetapi tidak akan cocokWorld
..+\b
akan cocok dengan keduanyaHello
danWorld
.sumber
\b
arti yang sama dengan(\W|^|$)
, karena(\W|^|$)
akan memasukkan karakter non-kata dalam hasil pencocokan. Anda dapat memeriksa fakta ini di sini => regexr.com/3qf98 .\b
bagi saya, berarti sama seperti(?<=\W|^|$)
ketika digunakan sebelum suatu pola dan(?=\W|^|$)
ketika digunakan setelah suatu pola. Anda dapat memeriksa apa yang saya bicarakan di sini => regexr.com/3qf9h . Bandingkan dengan hasil\b
jangkar di sini => regexr.com/3qf9tCocok dengan posisi yang diikuti oleh karakter kata tetapi tidak didahului oleh karakter kata, atau yang didahului oleh karakter kata tetapi tidak diikuti oleh karakter kata.
Itu selalu cocok dengan karakter ASCII [A-Za-z0-9_]
Apakah ada sesuatu yang spesifik yang ingin Anda cocokkan?
Beberapa situs web regex yang berguna untuk pemula atau hanya untuk membasahi selera makan Anda.
Saya menemukan ini sebagai buku yang sangat berguna:
sumber
\w
tidak selalu setara dengan karakter ASCII[A-Za-z0-9_]
- itu juga akan cocok dengan poin kode Unicode alfanumerik, dan mungkin cocok dengan karakter ISO-Latin-1 8-bit jika lokal diatur dengan tepat. .\w
adalah tidak batas kata, itu cocok dengan karakter kata, termasuk garis bawah:[a-zA-Z0-9_]
.\b
adalah batas kata, artinya cocok dengan posisi antara kata dan karakter non-alfanumerik:\W
atau[^\w]
.Implementasi ini dapat bervariasi dari satu bahasa ke bahasa lainnya.
sumber