\b गो रेगेक्स में लैटिन वर्णों वाली सीमाएं
गो रेगुलर एक्सप्रेशन की दुनिया में, \b सीमा विकल्प में थोड़ी विचित्रता है लैटिन अक्षरों के साथ व्यवहार करते समय। समस्या तब उत्पन्न होती है जब लैटिन वर्णों वाले शब्दों को परिभाषित करने का प्रयास किया जाता है, जैसे उच्चारण स्वर और विशेष वर्ण।
निम्न उदाहरण पर विचार करें, जहां हम \b सीमा विकल्प का उपयोग करके "विज़" शब्द का मिलान करना चाहते हैं:
import (
"fmt"
"regexp"
)
func main() {
r, _ := regexp.Compile(`\b(vis)\b`)
fmt.Println(r.MatchString("re vis e"))
fmt.Println(r.MatchString("revise"))
fmt.Println(r.MatchString("révisé"))
}
आश्चर्यजनक रूप से, "रेविज़" को गलत के रूप में मिलान करने का अपेक्षित परिणाम नहीं होता है। इसके बजाय, यह सच से मेल खाता है। ऐसा इसलिए है क्योंकि \b केवल ASCII शब्द सीमाओं पर काम करता है।
इस समस्या को हल करने और लैटिन वर्णों का सटीक मिलान करने के लिए, हम \b सीमा को अधिक समावेशी विकल्प के साथ बदल सकते हैं। यहां एक उदाहरण है:
import (
"fmt"
"regexp"
)
func main() {
r, _ := regexp.Compile(`(?:\A|\s)(vis)(?:\s|\z)`)
fmt.Println(r.MatchString("vis"))
fmt.Println(r.MatchString("re vis e"))
fmt.Println(r.MatchString("revise"))
fmt.Println(r.MatchString("révisé"))
}
इस संशोधन के साथ, रेगेक्स अब स्ट्रिंग की शुरुआत (\A), स्ट्रिंग के अंत (\z), और व्हाइटस्पेस (\s) के संयोजन का उपयोग करके शब्दों की शुरुआत और अंत को पहचानता है। परिणाम सटीक रूप से "विज़" को सत्य और "रिविज़" को गलत के रूप में मेल खाता है:
true true false false
यह तकनीक लैटिन वर्णों की उपस्थिति की परवाह किए बिना, सटीक शब्द मिलान सुनिश्चित करती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3