0
我正在製作一個使用webview顯示存儲的HTML數據的android應用程序。現在,我試圖結束的問題是如何在搜索某些用戶輸入字符串時忽略HTML/CSS等標記/元素。我的數據庫已經是110MB,我認爲使用另一個只有文本和沒有HTML的字段只會增加數據庫的大小。正則表達式也將很昂貴,可能不可靠。僅忽略SQLite中的HTML標記和搜索文本
有沒有其他方法可以做到這一點?
我正在製作一個使用webview顯示存儲的HTML數據的android應用程序。現在,我試圖結束的問題是如何在搜索某些用戶輸入字符串時忽略HTML/CSS等標記/元素。我的數據庫已經是110MB,我認爲使用另一個只有文本和沒有HTML的字段只會增加數據庫的大小。正則表達式也將很昂貴,可能不可靠。僅忽略SQLite中的HTML標記和搜索文本
有沒有其他方法可以做到這一點?
也許你可以在你的程序中對查詢的記錄進行額外的過濾。您可以使用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'
謝謝你的答覆。我從數據庫獲取記錄時沒有辦法進行過濾?例如列名像用戶字符串?從數據庫中提取所有數據以及將減慢搜索過程的處理。 –
這將是正則表達式的方式,我想不出任何其他解決方案。我在我的答案中添加了一個例子,我希望它有幫助。 – juzraai
謝謝。我會看看這裏有人能提出更好的方法。然後,我會對您的解決方案進行加權,使其無需使用純文本並直接查詢。 謝謝Juzraai –