Oracle 正则表达式排除一个词(仅当它被找到时)

Oracle Regex Exclude a Word (Only if it is found)

软件:甲骨文



我有一个匹配

的查询

EXCEL.EXEEXCEL.EXE

Dropbox.exeDropbox.exe

1-2-3-4-hike.exe1-2-3-4-hike.exe

shish boom bah.exebah.exe

MS OutlookMS Outlook

但是,我希望排除 .exe


换句话说

EXCEL.EXEEXCEL

Dropbox.exeDropbox

1-2-3-4-hike.exe1-2-3-4-hike

shish boom bah.exebah

MS OutlookMS 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

您可以使用正则表达式捕获组,在您想要的子字符串周围加上一个组(括号)。例如:

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