2017-08-30 50 views
0

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

有没有其他方法可以做到这一点?

回答

0

也许你可以在你的程序中对查询的记录进行额外的过滤。您可以使用HTML解析器(如Jsoup)去除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,而不是第二个:

searchterm <tag searchterm> searchterm </tag> searchterm 

你可以在行动here看到它。

SQLite中,你可以使用正则表达式是这样的:

WHERE column-name REGEXP 'regular-expression' 
+0

谢谢你的答复。我从数据库获取记录时没有办法进行过滤?例如列名像用户字符串?从数据库中提取所有数据以及将减慢搜索过程的处理。 –

+0

这将是正则表达式的方式,我想不出任何其他解决方案。我在我的答案中添加了一个例子,我希望它有帮助。 – juzraai

+0

谢谢。我会看看这里有人能提出更好的方法。然后,我会对您的解决方案进行加权,使其无需使用纯文本并直接查询。 谢谢Juzraai –