CREAT TABLE TMP_DATACOLLTALE_32 ASSELECT * FROM TF_TELE_OBJECTS OO WHERE OO.OBJECT_STATE=1  IF(1=1  AND    [.evalue] >0          AND [.evalue]<=1800      AND [.IS_HFZJ]=1)THEN   /*ACTION*/      END IFEND    怎么通过oracle的正则表达式来特换[.]或[] 中间的值,并去掉[.]~~
哪位大侠救命下~~     

解决方案 »

  1.   

    (\[\.)(\w*)(\])可以匹配[.xxxx],xxxx可以是任意字母数字。比如要把[.evalue] 和 [.IS_HFZJ] 都替换成abc。那么在emeditor等支持正则表达式的文本编辑器里面。
    查找(\[\.)(\w*)(\]),替换成abc就行了。如果只是希望去掉两边的[.],里面的内容保留。
    查找(\[\.)(\w*)(\]),替换成\2。\2代表第二个小括号里面的东西。
      

  2.   

    对于你上面的内容查找(\[\.)(\w*)(\]),替换成\2。
    的结果是CREAT TABLE TMP_DATACOLLTALE_32 ASSELECT * FROM TF_TELE_OBJECTS OO 
    WHERE OO.OBJECT_STATE=1  IF(1=1  AND    evalue >0          AND evalue <=1800      AND IS_HFZJ=1)THEN  /*ACTION*/      END IFEND 
      

  3.   

    select regexp_replace('AND    [.evalue] >0          AND [.evalue] <=1800      AND [.IS_HFZJ]=1)THEN','(\[\.)(\w*)(\])','\2') from dual;
    ---------------
    AND    evalue >0          AND evalue <=1800      AND IS_HFZJ=1)THEN
      

  4.   

    ----的确不错....ls的XD
    Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 
    Connected as billing
    SQL> select regexp_replace('[.evalue] >0 AND [.evalue] <=1800 AND [.IS_HFZJ]=1','(\[\.)(\w*)(\])','\2') from dual;REGEXP_REPLACE('[.EVALUE]>0AND
    -----------------------------------------
    evalue >0 AND evalue <=1800 AND IS_HFZJ=1SQL> 
      

  5.   

    SQL> select regexp_replace('AND  [.evalue] >0  AND [.evalue] <=1800      AND [.IS_HFZJ]=1)THEN','[[[|.]|[]]]*','')
      2  from dual
      3  /
     
    REGEXP_REPLACE('AND[.EVALUE]>0
    ---------------------------------------------------------
    AND  evalue >0  AND evalue <=1800      AND IS_HFZJ=1)THEN