\p{InCombiningDiacriticalMarks}एक यूनिकोड ब्लॉक संपत्ति है। JDK7 में, आप इसे दो-भाग अंकन का उपयोग करके लिख पाएंगे \p{Block=CombiningDiacriticalMarks}, जो पाठक को स्पष्ट हो सकता है। इसे यहाँ UAX # 44 में लिखा गया है: "यूनिकोड कैरेक्टर डेटाबेस" ।
इसका मतलब यह है कि कोड बिंदु एक विशेष सीमा के भीतर आता है, एक ब्लॉक, जिसे उस नाम से चीजों के लिए उपयोग करने के लिए आवंटित किया गया है। यह एक बुरा दृष्टिकोण है, क्योंकि इस बात की कोई गारंटी नहीं है कि उस सीमा में कोड बिंदु कोई विशेष बात नहीं है, और न ही उस ब्लॉक के बाहर कोड बिंदु अनिवार्य रूप से समान वर्ण के नहीं हैं।
उदाहरण के लिए, \p{Latin_1_Supplement}ब्लॉक में लैटिन अक्षर हैं , जैसे é, U + 00E9। हालांकि, वहाँ चीजें हैं जो कर रहे हैं नहीं लातिन अक्षरों वहाँ भी। और निश्चित रूप से सभी जगह लैटिन अक्षर भी हैं।
ब्लॉक लगभग कभी भी आप क्या चाहते हैं।
इस मामले में, मुझे संदेह है कि आप संपत्ति का उपयोग करना चाह सकते हैं \p{Mn}, उर्फ \p{Nonspacing_Mark}। कॉम्बिंग_डायरेक्चुअल ब्लॉक में सभी कोड पॉइंट उस तरह के होते हैं। वहाँ भी हैं (यूनिकोड 6.0.0 के रूप में) 1087 Nonspacing_Marks जो उस ब्लॉक में नहीं हैं ।
यही कारण है कि लगभग के लिए जाँच के रूप में ही है \p{Bidi_Class=Nonspacing_Mark}, लेकिन काफी नहीं है कि समूह में भी संलग्न के निशान भी शामिल है क्योंकि, \p{Me}। यदि आप दोनों चाहते हैं, [\p{Mn}\p{Me}]तो आप कह सकते हैं कि क्या आप एक डिफ़ॉल्ट जावा रेगेक्स इंजन का उपयोग कर रहे हैं, क्योंकि यह केवल General_Category संपत्ति तक पहुँच प्रदान करता है।
ICU C ++ regex लाइब्रेरी को प्राप्त करने के लिए आपको JNI का उपयोग करना होगा जिस तरह से Google कुछ करने के लिए उपयोग करता है \p{BC=NSM}, क्योंकि अभी केवल ICU और पर्ल सभी यूनिकोड गुणों तक पहुँच प्रदान करते हैं। सामान्य जावा रेगेक्स पुस्तकालय मानक यूनिकोड गुणों के केवल एक जोड़े का समर्थन करता है। JDK7 में हालांकि यूनिकोड स्क्रिप्ट के लिए समर्थन होगा , जो कि ब्लॉक संपत्ति के लिए असीम रूप से बेहतर है। इस प्रकार आप JDK7 लिखने में कर सकते हैं \p{Script=Latin}या \p{SC=Latin}, या छोटे-कट \p{Latin}, लैटिन लिपि से किसी भी चरित्र पर प्राप्त करने के लिए। यह बहुत ही सामान्य रूप से आवश्यक है [\p{Latin}\p{Common}\p{Inherited}]।
सभी पात्रों से "उच्चारण" के निशान के रूप में जो आप सोच सकते हैं उसे दूर नहीं करेंगे, इस बात का ध्यान रखें! कई ऐसे हैं जो ऐसा नहीं करेंगे। उदाहरण के लिए, आप परिवर्तित नहीं कर सकते Đ को डी या ø को ओ कि जिस तरह से। उसके लिए, आपको उन बिंदुओं को कोड बिंदुओं को कम करने की आवश्यकता होती है, जो यूनिकोड Collation Table में समान प्राथमिक कोलाजेशन ताकत से मेल खाते हैं।
एक और जगह जहां \p{Mn}बात विफल हो जाती है, ज़ाहिर है जैसे निशान \p{Me}, जाहिर है, लेकिन ऐसे भी \p{Diacritic}चरित्र हैं जो निशान नहीं हैं। अफसोस की बात है, आपको इसके लिए पूर्ण संपत्ति समर्थन की आवश्यकता है, जिसका अर्थ है जेएनआई या तो आईसीयू या पर्ल। जावा में यूनिकोड समर्थन के साथ बहुत सारे मुद्दे हैं, मुझे डर है।
ओह रुकिए, मैं देख रहा हूं कि आप पुर्तगाली हैं। आपको तब कोई समस्या नहीं होनी चाहिए जब आप केवल पुर्तगाली पाठ के साथ काम कर रहे हों।
हालाँकि, आप वास्तव में लहजे को हटाना नहीं चाहते हैं, मैं शर्त लगाता हूं, लेकिन आप चीजों को "उच्चारण-असंवेदनशील", सही से मिलान करने में सक्षम होना चाहते हैं? यदि हां, तो आप ऐसा कर सकते हैं ICU4J (जावा के लिए ICU) संपार्श्विक वर्ग का उपयोग कर । यदि आप प्राथमिक शक्ति से तुलना करते हैं, तो उच्चारण चिह्न नहीं गिने जाएंगे। मैं यह हर समय करता हूं क्योंकि मैं अक्सर स्पेनिश पाठ की प्रक्रिया करता हूं। मेरे पास इसका एक उदाहरण है कि कैसे स्पेनिश के लिए यह करना है कि अगर आपको इसकी आवश्यकता है