日期:2014-05-16  浏览次数:20906 次

用正则表达式匹配时,如果屏蔽掉过程中注释掉的部分
我需要在一串很长的字符串中匹配某固定字符串,但是希望将原字符串中/*与*/之间的内容屏蔽掉,不参与匹配,由于/*与*/之间的内容可能不在一行,且过程中会存在多对,希望仅将/*与*/之间的内容屏蔽,其余部分保留,以原字符串如下为例:
CREATE OR REPLACE PROCEDURE P_DM_C_D_CNT_BB_WLAN_BASE_TEXT(V_DATE   IN VARCHAR2,
                                                   V_PROV    IN VARCHAR2,
                                                   V_RETCODE OUT VARCHAR2,
                                                   V_RETINFO OUT VARCHAR2) AS
  /*@
  ****************************************************************
  *参数 --%@PARAM:                V_DATE  'YYYYMMDD'
  *参数 --%@PARAM:V_RETCODE       过程运行结束成功与否标志
  *参数 --%@PARAM:V_RETINFO       过程运行结束成功与否描述
  *备注 --%@REMARK:
  *修改记录 --%@MODIFY:

  *修改记录 --%@MODIFY:
  ******************************************************************
  @*/


  V_ROWLINE   NUMBER := 0;
  V_STARTTIME DATE; 
  V_LOG_SN    NUMBER;
BEGIN
  V_STARTTIME := SYSDATE; 
  /* ZB_DIM.DIM_BI_AREA;
  ZB_DIM.DIM_PROV */

/* ZB_DIM.DIM_BI_PAY_MODE */
ZB_DIM.DIM_BI_ACTIVITY_TYPE;
  SELECT ZBA_DWD.SEQ_DWD_SQLPARSER.NEXTVAL
    INTO V_LOG_SN; --运行日志序号

  V_PROCNAME  := 'P_DM_C_D_CNT_BB_WLAN_BASE_TEXT'; 

其中红色字段部分均希望在匹配的时候给屏蔽掉,请大神帮忙。。。谢谢。。

------解决方案--------------------
select regexp_replace(replace(字符串,chr(10),' '), '/\*.*\*/','',1,0,'m') from table;

先替换空格,再匹配注释,可以不