如何在Java中匹配unicode字符

如何在Java中匹配unicode字符,java,regex,unicode,Java,Regex,Unicode,我试图在Java中匹配unicode字符 输入字符串:informa 要匹配的字符串:通知 到目前为止,我已经尝试过: Pattern p= Pattern.compile("informa[\u0000-\uffff].*", (Pattern.UNICODE_CASE|Pattern.CANON_EQ|Pattern.CASE_INSENSITIVE)); String s = "informátion"; Matcher m = p.matcher(s); if(m

我试图在Java中匹配unicode字符

输入字符串:
informa

要匹配的字符串:
通知

到目前为止,我已经尝试过:

Pattern p= Pattern.compile("informa[\u0000-\uffff].*", (Pattern.UNICODE_CASE|Pattern.CANON_EQ|Pattern.CASE_INSENSITIVE));
    String s = "informátion";
    Matcher m = p.matcher(s);
    if(m.matches()){
        System.out.println("Match!");
    }else{
        System.out.println("No match");
    }

结果是“没有对手”。有什么想法吗?

是因为
informa
根本不是
information
的子串吗

如果从正则表达式的
informa
中删除最后一个
a
,代码将如何工作?

术语“Unicode字符”不够具体。它将匹配Unicode范围内的每个字符,因此也是“普通”字符。然而,当一个人实际指的是“不在列表中的字符”时,这个术语经常被使用

在正则表达式中,它将是
[^\x20-\x7E]

boolean containsNonPrintableASCIIChars = string.matches(".*[^\\x20-\\x7E].*");
根据您希望如何处理这些信息,以下是一些有用的后续回答:


听起来你想要匹配字母,而忽略变音符号。如果这是正确的,那么将字符串规范化为NFD形式,去掉发音符号,然后进行搜索

String normalized = java.text.Normalizer.normalize(textToSearch, java.text.Normalizer.Form.NFD);
String withoutDiacritical = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
// Search code goes here...
要了解有关NFD的更多信息,请执行以下操作:


那《代码》呢?应该是“匹配”吗?是的,这是个好主意。目前,只有á可以。informa\u0301在模式字符串中工作。这与Pattern.CANON_EQ的情况有关。忘了添加链接,(Pattern.CANON_EQ)java.text.Normalizer似乎是一个不错的选择(子弹2)。Unicode匹配似乎并没有像预期的那样工作,即使它工作了,我也可能会受到性能上的损失。如果您的实际功能要求是“去掉变音符号”,那么这确实是一条路要走。你最初的问题不仅不是这样表述的:)我认为这个问题并不十分清楚。目标是能够将“信息”与“信息”匹配起来,从而能够将“a”与任何形式的“a”、“å”等匹配起来。去除发音符号,然后匹配似乎是一条可行之路。