在 Postgres 文本列中搜索并返回所有出现的关键字

Searching and returning all occurences of keyword in a Postgres text column

关于数据库

Confluence 页面内容的数据库 table 名为 bodycontent,HTML 内容存储在名为 body 的列中,这是一个文本字段。我正在使用 Postgres 数据库。主键名为 bodycontentid

我需要的结果

对于 table 中的每一行,我需要找到所有出现的 <image> 标记,其中 src 属性在 body 中以“http://images.mydomain.com/allImages/%”开头] 列

示例

假设 bodybodycontentid = 12345 包含以下文本:

<h1>Chapter 1</h1>
<image src="http://www.google.com/image/111.jpg"/>
<h1>Chapter 2</h1>
<image src="http://images.mydomain.com/allImages/222.jpg"/>
<h1>Chapter 3</h1>
<image src="http://images.mydomain.com/allImages/333.jpg"/>

运行 后的结果此查询应 return:

bodycontentid: 12345 body: http://images.mydomain.com/allImages/222.jpg

bodycontentid: 12345 body: http://images.mydomain.com/allImages/333.jpg

我试过的

我能够找到至少出现一次我正在搜索的关键字的所有行(见下文),但我需要的是获取与我的查询匹配的每行所有关键字的列表。

SELECT *
FROM bodycontent
WHERE body LIKE '%http://images.mydomain.com/allImages/%'

一种方法是使用 regexp_split_to_table() 然后进行一些字符串操作:

select bc.bodycontentid,
       left(rst.s, position('"' in rst.s) - 1) as domain
from bodycontent bc, lateral
     regexp_split_to_table(bc.body, E'srce="') rst(s)
where rst.s like 'http://images.mydomain.com/allImages/%';