* operator jest domyślnie „chciwy”
. Zezwalasz na dowolne znaki między distinct i ) , w dowolnej ilości. i w tym pierwszy ) się.
Jak zasugerował EatÅPeach, możesz sprawić, że nie będzie zachłanny za pomocą ? :
Więc tutaj, z .*? zamiast .* :
select regexp_substr(
'select count(distinct empno), count(distinct deptno) from emp',
'count\(distinct.*?\)')
from dual;
Lub możesz określić, że powinien to być dowolny znak z wyjątkiem ) z [^)]* zamiast .* .
select regexp_substr(
'select count(distinct empno), count(distinct deptno) from emp',
'count\(distinct[^)]*\)')
from dual;