[英]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 標准本身的引用。
char
類型char
類型隱式為 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.