Регулярное выражение для поиска одной из двух строк, когда одна состоит из другой - PullRequest
0 голосов
/ 29 января 2019

Используется в 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).?')

Как я могу это исправить?

Upd.По сути, мне нужна замена регулярного выражения для следующего кода:

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

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Может быть, я полностью скучаю по лодке, но звучит так, будто вам просто нужна соответствующая строка, если это одна из этих трех строк.

Если это так, и вы используете регулярное выражение, будет ли простая подстрокане работает?

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
0 голосов
/ 29 января 2019

Попробуйте использовать регулярные выражения следующим образом:

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'

enter image description here

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...