如何从PostgreSQL中的文本中删除分隔部分?

我想从字符串中消除一些文本模式,我的字符串有一个管道分隔符,并且参数并不总是相互跟随。

这是我的字符串

TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3

我想消除TType=SENDURL=min://j?_a=3&ver=1.1

因此我的最终结果应该是

Status=OK|day=3
Status=OK|day=3

我尝试过的。不适 用于 postgresql

select REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3', 
'(TType=.*?(||$))|(URL=.*?(||$))', '')

回答

回答:

SELECT 
REGEXP_REPLACE(
 REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
  '(TType|URL)=[^|]*|?', '','g'),
'|$', '');

解释:

  1. .*?模式中的部分虽然不贪婪,但也会消耗冒号,因此不会按预期运行。这是通过[^|]*消耗任何非冒号字符零次或多次来解决的。

  2. 然后您还需要添加全局标志“g”,以替换所有出现的模式,如文档中所述。

  3. 最后,如果您需要消除的参数最后出现(因为参数可以按任何顺序出现),您需要添加额外的替换步骤以消除字符串末尾的残留冒号。

例如没有额外的步骤,以下

SELECT
REGEXP_REPLACE('Status=OK|URL=min://j?_a=3&ver=1.1|day=3|TType=SEND',
  '(TType|URL)=[^|]*|?', '','g');

产生

Status=OK|day=3|

同时,添加额外的步骤,以下

SELECT 
REGEXP_REPLACE(
 REGEXP_REPLACE('Status=OK|URL=min://j?_a=3&ver=1.1|day=3|TType=SEND',
  '(TType|URL)=[^|]*|?', '','g'),
'|$', '');

产生所需的


以上是如何从PostgreSQL中的文本中删除分隔部分?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>