gpt4 book ai didi

特殊字符的Java正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:22 25 4
gpt4 key购买 nike

我有从文本中提取 #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Č”。

测试:输入:

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

输出:

[#Orange]

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

最佳答案

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

When this flag is specified then the (US-ASCII only) Predefined character classes and POSIX character classes are in conformance with Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.

这里是 a demo :

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č]

关于特殊字符的Java正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34088598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com