当前位置:  开发笔记 > 编程语言 > 正文

Java正则表达式的特殊字符

如何解决《Java正则表达式的特殊字符》经验,为你挑选了1个好方法。

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

private String[] buildHashTag(String str) {
        ArrayList allMatches = new ArrayList();
        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?].你能告诉我,错误的代码在哪里?帮我.谢谢.



1> Wiktor Strib..:

添加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 allMatches = new ArrayList();
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?]

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有