为了账号安全,请及时绑定邮箱和手机立即绑定

Java regex是否支持Unicode?

/ 猿问

Java regex是否支持Unicode?

紫衣仙女 2019-11-13 13:04:32

为了使A与Z匹配,我们将使用正则表达式:


[A-Za-z]


如何允许正则表达式匹配用户输入的utf8字符?例如环保部等中文单词


查看完整描述

3 回答

?
Cats萌萌

您正在寻找的是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将匹配所有字母和所有数字从任何语言(当然还有一些字的组合字符喜欢_)。


查看完整回答
反对 回复 2019-11-13
?
胡说叔叔

为了解决NLS支持问题并避免接受英语特殊字符,我们可以使用以下模式...


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


查看完整回答
反对 回复 2019-11-13
?
慕圣8478803

Java正则表达式API适用于该char类型

该char类型隐式为UTF-16

如果您有UTF-8数据,则需要在输入时将其转码为UTF-16

Unicode是通用的字符集,而UTF-8可以描述所有字符(包括控制字符,标点符号,符号,字母等)。您将必须更加明确地确定要包含的内容和要排除的内容。Java正则表达式使用\p{category}语法按类别匹配代码点。请参阅Unicode标准的列表类别。


如果要在表意文字序列中识别和分隔单词,则需要查看更复杂的API。我将从BreakIterator类型开始。


查看完整回答
反对 回复 2019-11-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信