【发布时间】:2016-10-05 22:10:57
【问题描述】:
我需要在 Android 应用中突出显示搜索主题标签的结果。假设我的搜索词是“#fun”。
示例字符串:“#fun #funny #fun123 #funtimes #fun#hi”
期望的输出:“#fun #funny #fun123 #funtimes #fun#hi”
我尝试了以下 -
Pattern.compile(searchTerm + "\\b");
其中 searchTerm 是“#fun”。
结果:“#fun #funny #fun123 #fun次 #fun#hi”
单词边界不应该停止像“#funny”这样的字符串中的子字符串突出显示吗?
这就是我应用正则表达式的方式:
private void addLinkToSpan(Spannable s, Link link) {
Pattern pattern = Pattern.compile(searchTerm + "\\b");
Matcher matcher = pattern.matcher(mText);
while (matcher.find()) {
int start = matcher.start();
if (start >= 0) {
int end = start + link.getText().length();
applyLink(link, new ClickableLinkSpan.Range(start, end), s);
}
}
}
private void applyLink(final Link link, final ClickableLinkSpan.Range range, Spannable text) {
ClickableLinkSpan linkSpan = new ClickableLinkSpan(link, range);
text.setSpan(linkSpan, range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
StyleSpan styleSpan = new StyleSpan(link.getTextStyle().ordinal());
text.setSpan(styleSpan, range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
【问题讨论】:
-
请向我们展示您的完整代码。
-
\b工作正常。 regex101.com/r/3jYEoy/1 -
对于当前输入和预期输出......正则表达式很好......你应该检查你的java代码
-
@Alikbar - 错过了您之前的评论。
[^\\d\\w]不匹配零长度。例如对于"abc",matches("abc\\b")与matches("abc[^\\d\\w])"不同 -
当然,谢谢 :)
标签: java android regex word-boundary