仅在SQLite中忽略HTML标记和搜索文本

时间:2017-08-30 16:42:10

标签: android html sqlite

我正在制作一个使用webview显示存储的HTML数据的Android应用程序。现在,我试图解决的问题是在搜索某些用户输入字符串时如何忽略HTML / CSS等标签/元素。我的数据库已经是110MB,我认为使用另一个只有文本而没有HTML的字段只会为数据库增加更多的大小。正则表达式也很昂贵,可能不可靠。

还有其他办法吗?

1 个答案:

答案 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'