2012-06-05 13 views
52

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

[a-zA-z]

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

+0

जावा 7 में, यूनिकोड regex 'UNICODE_CHARACTER_CLASS' झंडा ओ के साथ समर्थित है आर एम्बेड करने योग्य '(? यू)'। Http://stackoverflow.com/questions/4304928/unicode-equivalents-for-w-and-b-in-java-regular-expressions –

उत्तर

79

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

उदा। \p{L} इस तरह के एक चीनी शब्द मिलान करने के लिए की तरह कुछ हो सकता है किसी भी

तो भाषा एक regex से पत्र के किसी भी प्रकार है

\p{L}+ 

कई ऐसे गुण होते हैं, कर रहे हैं के लिए अधिक विवरण देखने के regular-expressions.info

एक अन्य विकल्प संशोधक

Pattern.UNICODE_CHARACTER_CLASS

उपयोग करने के लिए जावा 7 वहाँ मैं में है सा नया संपत्ति Pattern.UNICODE_CHARACTER_CLASS कि पूर्वनिर्धारित चरित्र वर्गों के यूनिकोड संस्करण सक्षम हो see my answer here for some more details and links

आप इस

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

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

7

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

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

+0

उपयोगकर्ता उदाहरण द्वारा दर्ज किए गए एकाधिक utf8 वर्णों को मैट करने के लिए कैसे देखें 环保 部, क्योंकि उपयोगकर्ता होगा यादृच्छिक रूप से वर्णों की संख्या दर्ज करना – cometta

+1

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

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

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

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

6

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

[एक-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());