[英]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.