我正在制作一个使用webview显示存储的HTML数据的Android应用程序。现在,我试图解决的问题是在搜索某些用户输入字符串时如何忽略HTML / CSS等标签/元素。我的数据库已经是110MB,我认为使用另一个只有文本而没有HTML的字段只会为数据库增加更多的大小。正则表达式也很昂贵,可能不可靠。
还有其他办法吗?
答案 0 :(得分:0)
也许您可以在查询记录中对程序进行额外过滤。您可以使用Jsoup之类的HTML解析器来删除HTML标记,然后您可以搜索剩余的文本。使用Jsoup的简单Java示例:
List<String> records = ... // your queried records - potential results
List<String> results = new ArrayList<String>();
for(String r : records) {
Document d = Jsoup.parse(r); // parse HTML
String text = d.text(); // extract text
if (text.contains(searchTerm)) { // or do your search here
results.add(r);
}
}
return results; // you got real results here
这可能不是最佳解决方案,但可以选择。我认为它也很昂贵,但比正则表达式(你试图避免)更可靠。
更新:正则表达方式
我认为在提取时删除HTML标记的唯一方法是使用regex in SQLite。例如,以下模式应该用于匹配HTML标记之外的字符串:
(^|>)[^<]*(searchterm)[^<]*(<|$)
在以下示例文本中,它仅匹配第1个,第3个和第4个searchterm
而不是第2个:
searchterm <tag searchterm> searchterm </tag> searchterm
您可以在行动here中看到它。
在SQLite中,您可以这样使用正则表达式:
WHERE column-name REGEXP 'regular-expression'