Oracle REGEXP_REPLACE匹配不含APPEND的PARALLEL提示正则需求
移除不含APPEND的PARALLEL提示注释的REGEXP_REPLACE实现
你需要修改REGEXP_REPLACE的正则表达式,实现仅移除不含APPEND的PARALLEL提示注释,保留包含APPEND的PARALLEL注释。
解决方案
使用负向预查排除包含APPEND的注释,精准匹配仅含PARALLEL的注释,同时开启不区分大小写匹配,覆盖大小写差异场景。
修改后的完整PL/SQL代码
DECLARE v_clob CLOB := 'This is a sample SQL query /* APPEND PARALLEL(table) hint */ with a hint. /* PARALLEL(table) hint */'; v_new_clob CLOB; BEGIN -- 移除含PARALLEL但不含APPEND的注释 v_new_clob := REGEXP_REPLACE(v_clob, '/\*(?!.*APPEND).*?PARALLEL.*?\*/', '', 1, 0, 'i'); -- 输出修改后的结果 DBMS_OUTPUT.PUT_LINE(v_new_clob); END;
执行结果
This is a sample SQL query /* APPEND PARALLEL(table) hint */ with a hint.
正则表达式逻辑说明
/*:匹配SQL注释的起始标记(?!.*APPEND):负向预查断言,确保当前注释范围内不存在APPEND字符串('i'参数开启不区分大小写,兼容Append/append等写法).*?PARALLEL:非贪婪匹配到PARALLEL关键字,避免跨多个注释误匹配.*?*/:非贪婪匹配到注释的结束标记,精准限定单条注释范围
内容的提问来源于stack exchange,提问作者Panos_Koro
相关产品推荐
相关产品推荐

