\ W और \ b नियमित अभिव्यक्ति मेटा वर्णों के बीच अंतर


142

क्या कोई भी \bऔर \wनियमित अभिव्यक्ति रूपक के बीच अंतर समझा सकता है ? यह मेरी समझ है कि इन दोनों रूपक का उपयोग शब्द सीमाओं के लिए किया जाता है। इसके अलावा, कौन सा मेटा चरित्र बहुभाषी सामग्री के लिए कुशल है?


11
\wएक शब्द चरित्र का प्रतिनिधित्व करता है , जबकि एक शब्द चरित्र और एक गैर-शब्द चरित्र के बीच एक शब्द सीमा का\b प्रतिनिधित्व करता है । वे एक ही बात नहीं कर रहे हैं
BoltClock

जवाबों:


259

मेटाचैटर \bएक एंकर है जैसे कि कैरेट और डॉलर साइन। यह एक ऐसी स्थिति से मेल खाता है जिसे "शब्द सीमा" कहा जाता है । यह मैच जीरो-लेंथ है।

तीन अलग-अलग पद हैं जो शब्द सीमा के रूप में योग्य हैं:

  • स्ट्रिंग में पहले वर्ण से पहले, यदि पहला वर्ण शब्द वर्ण है।
  • स्ट्रिंग में अंतिम वर्ण के बाद, यदि अंतिम वर्ण एक शब्द वर्ण है।
  • तार में दो वर्णों के बीच, जहाँ एक शब्द वर्ण है और दूसरा शब्द वर्ण नहीं है।

सीधे शब्दों में कहें: \bआपको "पूरे शब्द केवल" प्रदर्शन करने की अनुमति देता है, जिसके रूप में एक नियमित अभिव्यक्ति का उपयोग कर \bword\b। एक "शब्द चरित्र" एक ऐसा चरित्र है जिसका उपयोग शब्दों को बनाने के लिए किया जा सकता है। सभी वर्ण जो "शब्द वर्ण" नहीं हैं, वे "गैर-शब्द वर्ण" हैं

सभी स्वादों में, वर्ण [a-zA-Z0-9_]शब्द अक्षर हैं। ये शॉर्ट-हैंड कैरेक्टर क्लास से भी मेल खाते हैं \w। स्वाद की तुलना में शब्द सीमाओं के लिए "अस्की" दिखाने वाले स्वाद केवल शब्द वर्णों के रूप में पहचानते हैं।

\w"शब्द चरित्र" के लिए खड़ा है , आमतौर पर [A-Za-z0-9_]। अंडरस्कोर और अंकों को शामिल करने पर ध्यान दें।

\Bका नकारात्मक संस्करण है \b\Bहर उस स्थिति में मेल खाता है जहाँ \bनहीं है। प्रभावी रूप से, \Bदो शब्द वर्णों के साथ-साथ दो गैर-शब्द वर्णों के बीच किसी भी स्थिति में मेल खाता है।

\Wके लिए लघु [^\w]संस्करण है \w


21

\wएक शब्द चरित्र से मेल खाता है। \bएक शून्य-चौड़ाई वाला मैच एक स्थिति चरित्र से मेल खाता है जिसमें एक तरफ एक शब्द चरित्र है, और कुछ ऐसा है जो दूसरे पर एक शब्द चरित्र नहीं है। (उन चीजों के उदाहरण जो शब्द वर्ण नहीं हैं, उनमें व्हाट्सएप, स्ट्रिंग की शुरुआत और अंत आदि शामिल हैं)

\wमैचों a, b, c, d, e, और fमें "abc def"
\bमैचों से पहले (शून्य चौड़ाई) स्थिति a, के बाद c, पहले d, और बाद fमें"abc def"

देखें: http : //www. अनियमित-expressions.info/reference.html/


3
यह कहना अधिक सही है कि यह एक शब्द चरित्र के बीच की सीमा है, न कि एक शब्द चरित्र क्योंकि यह एक शब्द चरित्र और एक स्ट्रिंग के प्रारंभ या अंत के बीच मेल खाता है यदि यह चरित्र स्ट्रिंग के शुरू / अंत में है।
MRAB

5
यह अभी भी काफी सही नहीं है। \bएक शून्य-चौड़ाई का दावा; यह एक चरित्र से मेल नहीं खाता , यह एक स्थिति से मेल खाता है ।
एलन मूर

10

@ महेंदर, आप शायद \W(के बजाय \w) और के बीच का अंतर रखते थे \b। यदि नहीं, तो मैं @BoltClock और @jwismar के साथ ऊपर सहमत होना चाहिए। अन्यथा पढ़ना जारी रखें।

\Wकिसी भी गैर-शब्द चरित्र से मेल खाएगा और इसलिए इसका उपयोग शब्द सीमाओं से मेल खाने के लिए करने की कोशिश करना आसान है। समस्या यह है कि यह एक रेखा के प्रारंभ या अंत से मेल नहीं खाएगा। \bयह शब्द सीमाओं से मेल खाने के लिए अधिक अनुकूल है क्योंकि यह एक रेखा के प्रारंभ या अंत से मेल भी खाएगा। मोटे तौर पर बोलना (अधिक अनुभवी उपयोगकर्ता मुझे यहाँ सही कर सकते हैं) के \bबारे में सोचा जा सकता है (\W|^|$)। [संपादित करें: जैसा कि @ gamega नीचे उल्लेख करता है, \bएक शून्य-लंबाई वाला मैच है, इसलिए (\W|^|$)यह कड़ाई से सही नहीं है, लेकिन उम्मीद है कि यह अलग होने में मदद करेगा।]

त्वरित उदाहरण: स्ट्रिंग के लिए Hello World, .+\Wमिलान होगा Hello_(अंतरिक्ष के साथ) लेकिन मेल नहीं खाएगा World। और .+\bदोनों का मेल होगा ।HelloWorld


मैं इसके \bअर्थ से असहमत हूं (\W|^|$), क्योंकि (\W|^|$)मिलान परिणाम के अंदर गैर-शब्द वर्ण शामिल होगा। आप इस तथ्य को यहाँ देख सकते हैं => regexr.com/3qf98
विक्टर

\bमेरे लिए, इसका मतलब है (?<=\W|^|$)जब एक पैटर्न से पहले इस्तेमाल किया जाता है और (?=\W|^|$)एक पैटर्न के बाद उपयोग किया जाता है। आप देख सकते हैं कि मैं यहाँ क्या बोल रहा हूँ => regexr.com/3qf9h । बस \bयहाँ एंकर के परिणाम के साथ तुलना करें => regexr.com/3qf9t
विक्टर

4
\b <= this is a word boundary.

एक ऐसी स्थिति से मेल खाता है जो एक शब्द चरित्र द्वारा पीछा किया जाता है, लेकिन एक शब्द चरित्र से पहले नहीं है, या जो एक शब्द चरित्र से पहले है लेकिन एक शब्द चरित्र द्वारा पीछा नहीं किया गया है।

\w <= stands for "word character". 

यह हमेशा ASCII वर्णों से मेल खाता है [A-Za-z0-9_]

क्या आपके द्वारा मिलान करने के लिए कुछ विशिष्ट है?

शुरुआती के लिए या सिर्फ अपनी भूख को गीला करने के लिए कुछ उपयोगी रेगेक्स वेबसाइट।

मुझे यह एक बहुत उपयोगी पुस्तक लगी:


5
यह एक अच्छा उत्तर है, लेकिन यह याद रखना उपयोगी है कि \wहमेशा ASCII वर्णों के बराबर नहीं होता है [A-Za-z0-9_]- यह अल्फ़ान्यूमेरिक यूनिकोड कोड बिंदुओं से भी मेल खाएगा, और यदि लोकेल को उचित रूप से सेट किया गया है तो 8-बिट आईएसओ-लैटिन -1 अक्षरों से मेल खा सकता है। ।
टिम पियर्स

2

\wहै एक शब्द सीमा, यह अंडरस्कोर सहित किसी भी शब्द चरित्र, मेल खाता है: [a-zA-Z0-9_]\b है : एक शब्द सीमा यह है कि, यह एक शब्द और एक गैर अक्षरांकीय चरित्र के बीच स्थिति से मेल खाता है \Wया [^\w]

ये कार्यान्वयन भाषा से भाषा में भिन्न हो सकते हैं, हालांकि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.