将在PostgreSQL中使用。 我有一组字符串,例如:
xxx Heartbeat
yyy Heartbeat
xxx Code Red Entry/Exit
yyy Code Red Entry/Exit
xxx TFTP Server Heartbeat
yyy TFTP Server Heartbeat
我需要将第二部分拆分为未知字符串xxx / yyy之后,其中可以有空格。在我找到不交叉的搜索字符串并使用以下类型之前:
SUBSTRING(description, '(?i).*(Code Red Entry/Exit|TFTP Server Heartbeat).?')
但是在获得另一个(Heartbeat)选项之后,如果我使用此正则表达式,则在所有情况下都只会选择“ Heartbeat”
SUBSTRING(description, '(?i).*(Code Red Entry/Exit|TFTP Server Heartbeat|Heartbeat).?')
我该如何解决?
已更新。 基本上,我需要使用正则表达式替代下一个代码:
CASE WHEN description ILIKE '%TFTP Server Heartbeat' THEN 'TFTP Server Heartbeat'
WHEN description ILIKE '%Heartbeat' THEN 'Heartbeat'
WHEN description ILIKE '%Code Red Entry/Exit' THEN 'Code Red Entry/Exit'
etc...
END
答案 0 :(得分:0)
尝试使用正则表达式,如下所示:
SELECT ARRAY_TO_STRING(REGEXP_MATCHES(description, '^\y(TFTP Server Heartbeat|Heartbeat|Code Red Entry/Exit)\y$', 'g'), '')
FROM yourTable
WHERE description ~ '\y(TFTP Server Heartbeat|Heartbeat|Code Red Entry/Exit)\y'
答案 1 :(得分:0)
也许我完全想念这条船,但听起来好像您只是想要匹配的字符串(如果它是这三个字符串之一)。
如果是这种情况,并且您使用的是正则表达式,那么简单的子字符串就无法正常工作吗?
select
substring (description from 'TFTP Server Heartbeat|Code Red Entry/Exit|Heartbeat')
示例数据的结果:
Heartbeat
Heartbeat
Code Red Entry/Exit
Code Red Entry/Exit
TFTP Server Heartbeat
TFTP Server Heartbeat