Oracle Regex исключает слово (только если оно найдено) - PullRequest
0 голосов
/ 15 мая 2019

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: Oracle



У меня запрос, соответствующий

EXCEL.EXE до EXCEL.EXE

Dropbox.exe до Dropbox.exe

1-2-3-4-hike.exe до 1-2-3-4-hike.exe

shish boom bah.exe до bah.exe

MS Outlook до MS Outlook

Однако я хочу исключить .exe.


Другими словами

EXCEL.EXE до EXCEL

Dropbox.exe до Dropbox

1-2-3-4-hike.exe до 1-2-3-4-hike

shish boom bah.exe до bah

MS Outlook до MS Outlook


Вот предыдущий рабочий запрос:

CASE WHEN REGEXP_LIKE(M.ENDPOINTAPPLICATIONNAME, '\.exe', 'i')
     THEN REGEXP_SUBSTR(M.ENDPOINTAPPLICATIONNAME,'[a-zA-Z0-9]\S*\.exe',1,1,'i')
     ELSE M.ENDPOINTAPPLICATIONNAME
END

А вот мой неверный измененный запрос - среди прочего пытался !(.exe) - Пожалуйста, руководство

CASE WHEN REGEXP_LIKE(M.ENDPOINTAPPLICATIONNAME, '\.exe', 'i')
     THEN REGEXP_SUBSTR(M.ENDPOINTAPPLICATIONNAME,'[a-zA-Z0-9]\S*\!(.exe)',1,1,'i')
     ELSE M.ENDPOINTAPPLICATIONNAME
END

1 Ответ

1 голос
/ 15 мая 2019

Вы можете использовать группы сбора регулярных выражений с группой (круглые скобки) вокруг желаемой подстроки.Например:

with test_vals AS (
    SELECT 'EXCEL.EXE' AS ENDPOINTAPPLICATIONNAME FROM dual
    UNION ALL SELECT 'Dropbox.exe' FROM dual
    UNION ALL SELECT '1-2-3-4-hike.exe' FROM dual
    UNION ALL SELECT 'shish boom bah.exe' FROM dual
    UNION ALL SELECT 'MS Outlook' FROM dual
)

SELECT CASE WHEN REGEXP_LIKE(M.ENDPOINTAPPLICATIONNAME, '\.exe', 'i')
           THEN REGEXP_SUBSTR(
                  M.ENDPOINTAPPLICATIONNAME,'([a-zA-Z0-9]\S*)\.exe',1,1,'i',1 /* Only return result of first capturing group */
               )
           ELSE M.ENDPOINTAPPLICATIONNAME
       END
FROM test_vals m
...