SQLite与正则表达式一样

时间:2011-09-07 23:26:59

标签: regex sqlite sql-like

我有一个包含HTML内容的专栏。我想在该列中搜索单词,但只搜索文本,而不是HTML代码。

例如:

(1) <p class="last">First time I went there...</p>
(2) This is a <em>very</em> subtle colour.

(1)搜索last找不到它,因为它是一个类名,而不是内容。
(2)搜索very subtle会找到它,忽略HTML

这可以直接用SQLite吗?

注意:我无法定义函数。

2 个答案:

答案 0 :(得分:1)

不要使用SQLite。

使用您的编程语言,使用SQLite的框架。

在包含html代码的列的表中,为有关html的数据添加其他列。当您使用框架分析html时,您将不得不收集额外列的数据。

跟踪有关html格式所具有的结构的数据,并将额外的列保存为html数据的文本内容。

您可以通过简单的REGEX获取所有标签:

/<?[^<>]+>?/

通过扫描带有上述正则表达式的标签的html数据来检查如何接收数据,并为标记内容编写迭代评估(即,如果结果数组中的字符串以“&lt;”ita标记开头,通过使用/<\s*\/\s*[^>]+>/进行扫描,您将看到它是否为结束标记,并通过/<\s*[^\/>]+\s*\/\s*>/扫描它,您将看到它是否是单个封闭标记。如果没有适用的差异状态,则为文字内容。

答案 1 :(得分:0)

直接在SQLite中执行此操作并不是很好的方法(您需要构建一个解析HTML的SQLite扩展,让您像MSSQL的XML字段类型一样搜索它)

最好的办法是解析代码中的HTML并将所有文本写入单独的列中,以便在评论中以@Kevin的形式进行搜索。

E.g。

 ID | HTML                                   | Text
 ---------------------------------------------------------------------------
 1  | <p class="last">First time ...</p>     | First time ...
 2  | This is a <em>very</em> subtle colour. | This is a very subtle colour.