簡體   English   中英

Java 支持 Unicode 的正則表達式?

[英]Java regex for support Unicode?

為了匹配 A 到 Z,我們將使用正則表達式:

[A-Za-z]

如何讓正則表達式匹配用戶輸入的utf8字符? 例如像環保部這樣的中文詞

您正在尋找的是 Unicode 屬性。

例如\\p{L}是來自任何語言的任何類型的字母

所以匹配這樣一個中文單詞的正則表達式可能是這樣的

\p{L}+

有很多這樣的屬性,有關更多詳細信息,請參閱regular-expressions.info

另一種選擇是使用修飾符

Pattern.UNICODE_CHARACTER_CLASS

在 Java 7 中有一個新屬性Pattern.UNICODE_CHARACTER_CLASS可以啟用預定義字符類的 Unicode 版本,請在此處查看我的答案以獲取更多詳細信息和鏈接

你可以做這樣的事情

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

\\w將匹配來自任何語言的所有字母和所有數字(當然還有一些組合字符的單詞,如_ )。

為了解決 NLS 支持並避免接受英文特殊字符,我們可以使用以下模式...

[a-zA-Z0-9 \€-\鿿]*+

對於 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());

要匹配單個字符,您可以簡單地將它們包含在字符類中,作為文字或通過語法。

顯然,您通常無法列出表意語言中所有允許的字符。 為了使正則表達式根據其類型或代碼塊處理 unicode 字符,支持此處定義的各種其他轉義。 查看“Unicode 支持”一節,特別是對Character類和 Unicode 標准本身的引用。

  • Java 正則表達式 API 適用於char類型
  • char類型隱式為 UTF-16
  • 如果您有 UTF-8 數據,則需要在輸入時將其轉碼為 UTF-16,如果這還沒有完成的話

Unicode 是通用字符集,UTF-8 可以描述所有字符(包括控制字符、標點符號、符號、字母等)。您必須更具體地說明要包含的內容和要排除的內容。 Java 正則表達式使用\\p{category}語法按category匹配代碼點。 有關類別列表,請參閱Unicode 標准

如果您想在一系列表意文字中識別和分隔單詞,您將需要查看更復雜的 API。 我將從BreakIterator類型開始。

從Java 9開始,還可以用\X來匹配任何Unicode的擴展字素簇。 Java 文檔中查看更多信息:模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM