यूनिकोड समर्थन के लिए जावा रेगेक्स?


80

A से Z का मिलान करने के लिए, हम regex का उपयोग करेंगे:

[ए-ज़-ज़]

उपयोगकर्ता द्वारा दर्ज किए गए utf8 वर्णों से मिलान करने के लिए रेगेक्स को कैसे अनुमति दें? उदाहरण के लिए चीनी शब्द जैसे 环保 环保


2
जावा 7 में, यूनिकोड रेगेक्स को UNICODE_CHARACTER_CLASSध्वज या एम्बेड करने योग्य के साथ समर्थित है (?U)। देखें stackoverflow.com/questions/4304928/…
अलास्टेयर मैककॉर्मैक

जवाबों:


120

आप जो देख रहे हैं, वह यूनिकोड के गुण हैं।

जैसे \p{L}किसी भी भाषा का कोई भी अक्षर

तो ऐसे चीनी शब्द का मिलान करने के लिए एक रेगेक्स कुछ इस तरह हो सकता है

\p{L}+

ऐसे कई गुण हैं, अधिक जानकारी के लिए नियमित रूप से देखें-expressions.info

एक अन्य विकल्प संशोधक का उपयोग करना है

Pattern.UNICODE_CHARACTER_CLASS

जावा 7 में एक नई संपत्ति है Pattern.UNICODE_CHARACTER_CLASSजो पूर्वनिर्धारित चरित्र वर्गों के यूनिकोड संस्करण को सक्षम करता है, कुछ और विवरणों और लिंक के लिए यहां मेरा उत्तर देखें

आप ऐसा कुछ कर सकते हैं

Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);

और \wकिसी भी भाषा के सभी अक्षरों और सभी अंकों से मेल खाता होगा (और निश्चित रूप से कुछ शब्द जैसे वर्णों का संयोजन _)।


Da matchnx̱a̱lagałlitła ,n जैसे शब्दों से मिलान करने के लिए, क्या हमें डायकट्रिक्स को संयोजित करने के लिए पैटर्न मिलान करने वाले को निर्देश देने की आवश्यकता है?
डेव जार्विस

9

व्यक्तिगत पात्रों से मेल खाने के लिए, आप उन्हें केवल वर्ण वर्ग में या तो शाब्दिक रूप से या \u03FBवाक्य रचना के माध्यम से शामिल कर सकते हैं।

जाहिर है कि आप अक्सर सभी अनुमत चरित्रों को वैचारिक भाषाओं में सूचीबद्ध नहीं कर सकते हैं। रेगेक्स को उनके प्रकार या कोड ब्लॉक के अनुसार यूनिकोड वर्णों का इलाज करने के लिए, विभिन्न अन्य एस्केप समर्थित हैं जो यहां परिभाषित हैं । अनुभाग "यूनिकोड समर्थन" को देखें, विशेष रूप से Characterवर्ग और यूनिकोड मानक को ही देखें।


उपयोगकर्ता उदाहरण by by द्वारा दर्ज किए गए एकाधिक utf8 वर्णों को कैसे परिपक्व किया जाए, क्योंकि उपयोगकर्ता बेतरतीब ढंग से वर्णों की संख्या में प्रवेश करेगा
कॉमेटा

1
यह सिर्फ कई लैटिन वर्णों से मेल खाते की तरह है: [a-z]+या [a-z]{3}या यहाँ तक कि [a-z]{2,10}। केवल एक चीज अलग है जिसे आप उस वर्ण वर्ग में अनुमति देते हैं जो क्वांटिफायर पर लागू होता है।
किलियन फोथ

9

एनएलएस समर्थन को संबोधित करने और अंग्रेजी विशेष चरित्र को स्वीकार करने से बचने के लिए, हम नीचे दिए गए पैटर्न का उपयोग कर सकते हैं ...

[a-zA-Z0-9 \ u0080- \ u9fff] * +

UTF कोड बिंदु संदर्भ के लिए: http://www.utf8-chartable.de/unicode-utf8-table.pl

सांकेतिक टुकड़ा:

    String vowels = "అఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ";
    String consonants = "కఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహ";
    String signsAndPunctuations = "కఁకంకఃకాకికీకుకూకృకౄకెకేకైకొకోకౌక్కౕకౖ";
    String symbolsAndNumerals = "౦౧౨౩౪౫౬౭౮౯";
    String engChinesStr = "ABC導字會";


    Pattern ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU = Pattern
            .compile("[a-zA-Z0-9 \\u0c00-\\u0c7f]*+");
    System.out.println(ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU.matcher(vowels)
            .matches());


    Pattern ALPHANUMERIC_AND_SPACE_PATTERN_CHINESE = Pattern
            .compile("[a-zA-Z0-9 \\u4e00-\\u9fff]*+");

    Pattern ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN = Pattern
            .compile("[a-zA-Z0-9 \\u0080-\\u9fff]*+");

    System.out.println(ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN.matcher(engChinesStr)
            .matches());

3
  • जावा नियमित अभिव्यक्ति एपीआई charप्रकार पर काम करता है
  • charप्रकार परोक्ष UTF-16 है
  • यदि आपके पास UTF-8 डेटा है, तो आपको इसे इनपुट पर UTF-16 में ट्रांसकोड करना होगा यदि यह पहले से ही नहीं किया जा रहा है

यूनिकोड वर्णों का सार्वभौमिक समूह है और UTF-8 इसका पूरा वर्णन कर सकता है (नियंत्रण वर्ण, विराम चिह्न, प्रतीक, पत्र, आदि सहित) आपको जो आप शामिल करना चाहते हैं और जिसे आप बाहर करना चाहते हैं, उसके बारे में आपको अधिक विशिष्ट होना पड़ेगा। जावा नियमित अभिव्यक्तियाँ श्रेणी के\p{category} अनुसार कोडपॉइंट से मिलान करने के लिए सिंटैक्स का उपयोग करती है । श्रेणियों की सूची के लिए यूनिकोड मानक देखें ।

यदि आप विचारधाराओं के अनुक्रम में शब्दों को पहचानना और अलग करना चाहते हैं, तो आपको एक अधिक परिष्कृत एपीआई देखने की आवश्यकता होगी। मैं BreakIteratorटाइप से शुरू करूंगा ।

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