找回密码
 加入
搜索
查看: 8962|回复: 10

[系统综合] 请教该正则应如何写?空格\tab\换行\回车替换成一个空格

  [复制链接]
发表于 2013-2-22 23:26:36 | 显示全部楼层 |阅读模式
本帖最后由 auto 于 2013-2-23 09:25 编辑

请教该正则应如何写?空格\tab\换行\回车替换也一个空格,单个'号变成两个单引号''
一对单引号内容则完整保留。多行转成一行。其他的不变
例如: select a.*, 'a      b' as aa
          from          dual a
          where 1=1;
结果: select a.*, 'a      b' as aa from dual a where 1=1;


下面是是复杂一些的测试数据。
SELECT c.cd_name AS "街乡名称", r.rs AS "人数"
FROM (
        SELECT *
        FROM cdg_regioncode
        WHERE cd_id LIKE '110105___000'
                AND cd_id <> '110105000000'
                AND cd_availability = '1'
) c
        LEFT JOIN (
                SELECT substr(r.rzf_xzdxzqh, 1, 9) || '000' AS xzqh, COUNT(1) AS rs
                FROM sjcj_rydjbxx r, sjcj_fwdjbxx f
                WHERE f.bih_id = r.rzf_fwbh
                        AND f.fdj_sfzc = '0'
                        AND f.fwzjbxxdjb_fwzbh IS NOT NULL
                        AND f.bih_hou_constructiontype = '3'
                        AND f.fcz_czlx = '08'
                        AND r.rdj_sfzc = '0'
                        AND r.fwzjbxxdjb_fwzbh IS NOT NULL
                        AND r.rdj_sfyx = '1'
                        AND r.rzf_zslx = '02'
                        AND r.rzf_xzdxzqh LIKE '110105%'
                GROUP BY substr(r.rzf_xzdxzqh, 1, 9)
        ) r ON c.cd_id = r.xzqh
ORDER BY c.cd_id
发表于 2013-2-22 23:52:28 | 显示全部楼层
正则太深了,头晕
发表于 2013-2-23 10:57:33 | 显示全部楼层
Local $Str = _
                "select a.*, 'a      b' as aa " & @CRLF & _
                '          from          dual a' & @CRLF & _
                '          where 1=1;' & @CRLF
;MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, "((').*?\2)|\v*?(\h)\s+", '$1$3')
MsgBox(0, '替换结果', $Test)
发表于 2013-2-24 13:24:50 | 显示全部楼层
我现在还没弄明白正则表达式是什么意思呢
 楼主| 发表于 2013-3-3 22:09:44 | 显示全部楼层
本帖最后由 auto 于 2013-3-3 22:10 编辑

回复 3# afan


    试了这个另外一个代码,好像没有效果

能把正则的写法稍微解释一吗?谢谢

with t as(select '34052419800101001X'id from dual)
select id
from t
where exists(select 1
from dual connect by level<=length(id)-1 --17
having mod(sum(substr(id,level,1)*power(2,18-level)),11)=
case substr(id,-1,1)
when '1' then 0
when '0' then 1
when 'X' then 2
else
12-substr(id,-1,1)
end);
发表于 2013-3-3 22:27:19 | 显示全部楼层
回复 6# auto


    你一直也没说要整成什么结果…
难道你想整个这段整成一行?
with t as(select '34052419800101001X' id from dual) select id from t where exists(select 1 from dual connect by level<=length(id)-1 --17 having mod(sum(substr(id,level,1)*power(2,18-level)),11)= case substr(id,-1,1) when '1'  then 0 when '0'  then 1 when 'X'  then 2 else 12-substr(id,-1,1) end);
 楼主| 发表于 2013-3-3 22:35:54 | 显示全部楼层
回复 7# afan


空格\tab 替换成一个空格,
单个'号变成两个单引号''
一对单(双)引号内容则完整保留(不管里面是什么)。
换行\回车 替换成空格,即多行转成一行(这个可要也可以不要)
其他的不变

增加一个要求,不知道是否能实现
--后的字符,至行结束,删除
(例如: and id!='123' --过滤ID不等于123的数据
             and xh > 1000
    转换成: and id!='123' and and xh > 1000
发表于 2013-3-3 22:49:20 | 显示全部楼层
回复  afan
空格\tab 替换成一个空格,
单个'号变成两个单引号''
...
auto 发表于 2013-3-3 22:35



    1,你不用贴代码的方式贴字符串已不存在 \tab
2,单个'号变成两个单引号'' 示例没有体现,不知道何种情况是属于单个
3,转换成: and id!='123' and and xh > 1000 不知道为何会有两个 and...

搞不定~
 楼主| 发表于 2013-3-3 23:19:57 | 显示全部楼层
回复 9# afan


    1、对于1的情况,没有想到,我一会试一下贴成代码
    2、我找一个完整的转换的例子吧
   3、是笔误。。打的时候,多了一个and


另:正则的注册申请码是
D54E759F539DF22F196AC5118C3A0Eauto
以前的不见了,给个注册码
发表于 2013-3-3 23:21:58 | 显示全部楼层
回复 10# auto
BC3E9348872A3CEEA46D6B60E9B2A21498F1194EFD45
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-9 01:04 , Processed in 0.085944 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表