Oracle 正则表达式排除一个词(仅当它被找到时)
Oracle Regex Exclude a Word (Only if it is found)
软件:甲骨文
我有一个匹配
的查询
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
您可以使用正则表达式捕获组,在您想要的子字符串周围加上一个组(括号)。例如:
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
软件:甲骨文
我有一个匹配
的查询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
您可以使用正则表达式捕获组,在您想要的子字符串周围加上一个组(括号)。例如:
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