Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL 10-返回具有匹配ILIKE模式的部分列(文本)值及其';sn相邻词_Sql_Regex_Postgresql - Fatal编程技术网

PostgreSQL 10-返回具有匹配ILIKE模式的部分列(文本)值及其';sn相邻词

PostgreSQL 10-返回具有匹配ILIKE模式的部分列(文本)值及其';sn相邻词,sql,regex,postgresql,Sql,Regex,Postgresql,我正试图实现与谷歌搜索在显示结果时所做的类似的功能,因此在标题和url下,我们得到了一个简短的文本预览,其中包含搜索字符串中匹配的单词 文本数据示例: 通常,如果您在模型和反射表对象之间正确设置了所有的关系,则只需处理相关模型(通过将模型对象添加到关系工具列表中),即可将数据插入反射表 用户输入: 关系 结果: 正常情况下,如果您拥有所有的关系在模型之间正确发货设置 目前,我提出了以下(非常糟糕的)实施方案: SELECT id, COALESCE( (regexp_ma

我正试图实现与谷歌搜索在显示结果时所做的类似的功能,因此在标题和url下,我们得到了一个简短的文本预览,其中包含搜索字符串中匹配的单词

文本数据示例:

通常,如果您在模型和反射表对象之间正确设置了所有的关系,则只需处理相关模型(通过将模型对象添加到关系工具列表中),即可将数据插入反射表

用户输入:

关系

结果:

正常情况下,如果您拥有所有的关系在模型之间正确发货设置

目前,我提出了以下(非常糟糕的)实施方案:

SELECT id,
    COALESCE(
        (regexp_match(text, '(?i)\s.*?(relation.*?\s(\w+\s+){3})'))[1]
      , (regexp_match(text, '(?i)((\w+\s+){3}relation.*?)\s'))[1]
    ) AS text
FROM drafts.draft
WHERE
    text ILIKE '%relation%';
我真的不擅长正则表达式,所以它只显示下一个单词(而不是上一个),如果我们将上面给定的文本的3改为8,它返回的不是8个单词,而是更多的单词(我认为这是因为文本中有逗号)。此外,如果到文本结尾的单词少于N个,则返回NULL


简历:


给定一个随机长度的文本,我们希望设置参数
match,N
,其中
match
是我们的子字符串,
N
是我们希望从文本中第一个匹配短语的每一侧(之前和之后)获得的单词数。

您可以使用
substring()
基于模式进行提取。这似乎是您想要的:

select substring(str from '((\w+\W){0,3}[\w]*relation[\w]*(\W[\w]+){0,3})')
from (values ('Normally if you have all the relationship setup properly between models and reflection table objects, you will only need to deal with related models (by appending model objects into the relationship InstrumentList) in order to insert data into reflection tables.')) v(str)

有了
子字符串
,它就干净多了。非常感谢。我在regex的开头添加了一个
(?I)
,使其具有类似于ILIKE的不区分大小写的行为(稍后在WHERE部分中有)。也许它也会帮助一些人。