|
должно быть внутри строки регулярного выражения, вы не должны заканчивать строку.
REGEXP_SUBSTR(M.ENDPOINTAPPLICATIONNAME,'([^\s]*.exe)|(.)',1,1,'i')
Но .
соответствует только одному символу, а не всей строке.Вам нужно .*
, чтобы соответствовать всему.Также нет необходимости в скобках для группировки.
REGEXP_SUBSTR(M.ENDPOINTAPPLICATIONNAME,'[^\s]*.exe|.*',1,1,'i')
Однако на самом деле это не будет делать то, что вы хотите.При сопоставлении с регулярным выражением он ищет первое совпадение во входной строке, а не ту часть входной строки, которая соответствует первому варианту в регулярном выражении.Поскольку .*
соответствует shish boom bah.exe
, он вернет всю эту строку, а не просто bah.exe
.
Вам необходимо использовать CASE
, чтобы выбрать предпочтительную альтернативу:
CASE WHEN REGEXP_LIKE(M.ENDPOINTAPPLICATIONNAME, '\.exe', 'i')
THEN REGEXP_SUBSTR(M.ENDPOINTAPPLICATIONNAME,'\S*\.exe',1,1,'i')
ELSE M.ENDPOINTAPPLICATIONNAME
END
Обратите внимание, что вы также должны экранировать .
в регулярном выражении, так как обычно это подстановочный знак.И \S
совпадает с [^\s]
.