SQLite 与正则表达式类似

发布于 2024-12-03 08:53:38 字数 345 浏览 0 评论 0原文

我有一个包含 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微妙就会找到它,忽略HTML

直接用SQLite可以吗?

注意:我无法定义函数。

I have a column with HTML content. I want to search for words in that column, but only the text, not the HTML code.

For example:

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

(1) Searching for last doesn't find it, because it's a class name, not content.

(2) Searching for very subtle will find it, ignoring HTML

Is this possible with SQLite directly?

Note: I cannot define functions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晚风撩人 2024-12-10 08:53:38

不要使用 SQLite 这样做。

使用您的编程语言和使用 SQLite 的框架来完成此操作。

在表中包含 html 代码的列中,添加有关 html 的数据的附加列。当您使用框架分析 html 时,您必须收集额外列的数据。

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

您可以通过简单的正则表达式获取所有标签:

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

通过使用上面的正则表达式扫描标签的 html 数据来检查如何接收数据,并为标签内容编写迭代评估(即,如果结果数组中的字符串以“<”开头)。 " 这是一个标签,通过使用 /<\s*\/\s*[^>]+>/ 扫描它,您将看到它是否是结束标签并通过扫描它和/<\s*[^\/>]+\s*\/\s*>/ 您将看到它是否是单个闭合标记,如果没有一个有区别的状态。应用,就是文本内容。

Don't do it with SQLite.

Do it with your programming language, your framework that is using SQLite.

In the table, where you have the column with the html code, add additional columns for data about the html. You will have to gather the data for the extra columns, while you analyze the html with your framework.

Track data about the structure the html format does have and save in an extra column the textual content of the html data.

You can get all tags by simple REGEX:

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

Checkout how you receive data by scanning the html data for tags with the regexp above and write an iterated evaluation for tag-content (i.e. if a string in the results-array starts with a "<" it´s a tag, by scanning it with /<\s*\/\s*[^>]+>/ you will see if it is a ending tag and by scanning it with /<\s*[^\/>]+\s*\/\s*>/ you will see if it is a single closed tag. If none of the differentiated states does apply, it is textual content.

累赘 2024-12-10 08:53:38

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

最好的选择是解析代码中的 HTML,并将所有文本写到一个单独的列中,以便按照 @Kevin 在评论中建议的那样进行搜索。

例如

 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.

There isn't a good way to do that in SQLite directly (you'd need to build a SQLite extension that would parse the HTML and let you search through it like MSSQL's XML field type).

Your best bet is going to be to parse the HTML in your code and write out all the text into a separate column to search on as @Kevin suggests in the comments.

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.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文