如果要从第二个和第三个
/定界的组中获取结果,则:
with mcte ( addr ) as ( select 'ILLD/ELKJS/00000000/ELKJS/FHSH' from dual union all select 'ILLD/EFECTE/0116988-7-002/ADFA/ADFG' from dual union all select 'IIODK/1573230-0/2216755-7/' from dual union all select 'IIODK/1573230-0/2216755-700/WRITE' from dual union all select 'IIODK/TEST/1573230-0/2216755-700/WRITE' from dual)select addr, REGEXP_SUBSTr(addr,'^[^/]*/(d+-d)/',1,1,NULL,1) AS num1, REGEXP_SUBSTr(addr,'^[^/]*/[^/]*/(d+-d)/',1,1,NULL,1) num2from mcte;
输出 :
ADDR NUM1 NUM2-------------------------------------- ------------------- -------------------ILLD/ELKJS/00000000/ELKJS/FHSHILLD/EFECTE/0116988-7-002/ADFA/ADFGIIODK/1573230-0/2216755-7/ 1573230-02216755-7IIODK/1573230-0/2216755-700/WRITE 1573230-0IIODK/TEST/1573230-0/2216755-700/WRITE 1573230-0
更新 :
如果只希望第一个和第二个模式匹配,并且不在乎它们在字符串中的位置,则:
with mcte ( addr ) as ( select 'ILLD/ELKJS/00000000/ELKJS/FHSH' from dual union all select 'ILLD/EFECTE/0116988-7-002/ADFA/ADFG' from dual union all select 'IIODK/1573230-0/2216755-7/' from dual union all select 'IIODK/1573230-0/2216755-700/WRITE' from dual union all select 'IIODK/TEST/1573230-0/2216755-700/WRITE' from dual union all select '1234567-8' from dual union all select '1234567-8/9876543-2' from dual union all select '1234567-8/TEST/9876543-2' from dual)select addr, REGEXP_SUBSTr(addr,'(^|/)(d+-d)(/|$)',1,1,NULL,2) AS num1, REGEXP_SUBSTr(addr,'(^|/)d+-d(/.+?)?/(d+-d)(/|$)',1,1,NULL,3) num2from mcte;
输出 :
ADDR NUM1 NUM2-------------------------------------- ------------------- ------------------ILLD/ELKJS/00000000/ELKJS/FHSHILLD/EFECTE/0116988-7-002/ADFA/ADFGIIODK/1573230-0/2216755-7/ 1573230-02216755-7IIODK/1573230-0/2216755-700/WRITE 1573230-0IIODK/TEST/1573230-0/2216755-700/WRITE 1573230-01234567-8 1234567-81234567-8/9876543-2 1234567-89876543-21234567-8/TEST/9876543-2 1234567-89876543-2



