Oma*_*osa 2 regex sql postgresql replace string-function
我想从字符串中消除一些文本模式,我的字符串有一个管道分隔符,并且参数并不总是相互跟随。
这是我的字符串
TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3
Run Code Online (Sandbox Code Playgroud)
我想消除TType=SEND和URL=min://j?_a=3&ver=1.1
因此我的最终结果应该是
Status=OK|day=3
Run Code Online (Sandbox Code Playgroud)
我尝试过的。不适 用于 postgresql。
select REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
'(TType=.*?(\||$))|(URL=.*?(\||$))', '')
Run Code Online (Sandbox Code Playgroud)
小智 5
回答:
SELECT
REGEXP_REPLACE(
REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
'(TType|URL)=[^|]*\|?', '','g'),
'\|$', '');
Run Code Online (Sandbox Code Playgroud)
解释:
.*?模式中的部分虽然不贪婪,但也会消耗冒号,因此不会按预期运行。这是通过[^|]*消耗任何非冒号字符零次或多次来解决的。
然后您还需要添加全局标志“g”,以替换所有出现的模式,如文档中所述。
最后,如果您需要消除的参数最后出现(因为参数可以按任何顺序出现),您需要添加额外的替换步骤以消除字符串末尾的残留冒号。
例如没有额外的步骤,以下
SELECT
REGEXP_REPLACE('Status=OK|URL=min://j?_a=3&ver=1.1|day=3|TType=SEND',
'(TType|URL)=[^|]*\|?', '','g');
Run Code Online (Sandbox Code Playgroud)
产生
Status=OK|day=3|
Run Code Online (Sandbox Code Playgroud)
同时,添加额外的步骤,以下
SELECT
REGEXP_REPLACE(
REGEXP_REPLACE('Status=OK|URL=min://j?_a=3&ver=1.1|day=3|TType=SEND',
'(TType|URL)=[^|]*\|?', '','g'),
'\|$', '');
Run Code Online (Sandbox Code Playgroud)
产生所需的
Status=OK|day=3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |