1:使用此反转模式
regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace(
pattern, '(\()', '\1#') , '(\))', '#\1') , '\(#', ')#') , '\^\)#', '^') , '#\)\$', '$') , '#\)', '(#') , '#', '') , '\^([^\(]+\))', '^(\1') , '\(([^\)]+)\$', '(\1)$');
所以,“^(. )..(.).$”; 变成 "^. (..).(.)$";
2:使用它来批量收集两种模式中的捕获组的索引和计数
SELECT REGEXP_instr(pattern, '\(.*?\)+', 1, LEVEL) bulk collect into posCapture FROM v CONNECT BY LEVEL <= REGEXP_COUNT(pattern, '\(.*?\)');
3:将两种模式与要屏蔽的文本匹配。按步骤 2 中找到的顺序合并它们。
select regexp_replace(v_src, pattern, '\' || captureIndex) into tempStr from dual;