繁体   English   中英

Java正则表达式的特殊字符

[英]Java regex for special character

我有从文本中提取#hashTag简单方法:

private String[] buildHashTag(String str) {
        ArrayList<String> allMatches = new ArrayList<String>();
        Matcher m = Pattern.compile("(#\\w+)\\b").matcher(str);
        while (m.find()) {
            allMatches.add(m.group());
        }
        return allMatches.toArray(new String[0]);
    }

问题是如果我发送带有特殊字符的字符串,例如字符串“POMERANČ”。

测试:INPUT:

#Orange in Czech language mean #pomeranč :-)

OUTPUT:

[#Orange]

但它是FAIL,输出必须是[#Orange, #pomeranč] 你能告诉我,错误的代码在哪里? 帮我。 谢谢。

添加Pattern.UNICODE_CHARACTER_CLASS修饰符或使用Pattern.compile("(?U)(#\\\\w+)\\\\b") 否则, \\b\\w与所有Unicode字符都不匹配。

指定此标志后,(仅限US-ASCII) 预定义字符类POSIX字符类符合Unicode技术标准#18:Unicode正则表达式附录C:兼容性属性。

这是一个演示

String str = "#Orange in Czech language mean #pomeranč :-)";
ArrayList<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("(?U)(#\\w+)\\b").matcher(str);
//                           ^^^^
while (m.find()) {
    allMatches.add(m.group());
}
System.out.println(Arrays.toString(allMatches.toArray()));

输出: [#Orange, #pomeranč]

使用否定字符类代替

/#[^ ]+/
  • [^ ]+否定字符类,匹配空格以外的任何内容,实际上匹配字符直到下一个空格

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM