【发布时间】:2013-05-28 15:30:09
【问题描述】:
我想申请一个关于正则表达式的应用程序。用户输入一个正则表达式和一个测试文本,我想突出显示测试文本中与正则表达式匹配的所有内容。现在我做了这样的事情:
// txaTestText is an EditText
Editable testText = txaTestText.getText();
// pattern is a java.util.regex.Pattern input by user
Matcher matcher = pattern.matcher(testText);
// txaFindResult is a TextView
txaFindResult.setText(Html.fromHtml(matcher
.replaceAll("<font color=\"red\">$0</font>")));
问题是用户可能会输入一些包含 HTML 标签的字符串作为测试文本。例如:
- 正则表达式 =
o - 测试文本 =
Hello<br>world - 预期结果=
Hell<b>o</b><br>w<b>o</b>rld(由于StackOverflow不支持着色,我这里用粗体代替) - 实际结果=
Hell<b>o</b><br>w<b>o</b>rld
我尝试使用Html.escapeHtml。但是它是在 API 级别 16 中添加的,而我的最低要求是 8。
我的问题是如何解决上述问题?
【问题讨论】:
-
您可以尝试将
&lt;替换为&lt;,将&gt;替换为&gt;。 -
如果正则表达式是
&lt;,测试文本是&lt; <,就会出错。 -
我说的是结果,所以你应该在结果中替换它,而不是输入。
-
你的意思是
txaFindResult.setText(Html.fromHtml(matcher.replaceAll("<font color=\"red\">$0</font>").replace("<", "&lt;").replace(">", "&gt;")))?还是什么? -
抱歉,我不会用 Java 编写代码。这只是我从 PHP htmlspecialchars 中的一个函数中得到的一个想法。
标签: java android regex textview highlight