zoukankan      html  css  js  c++  java
  • 由正则表达式REGEXP_REPLACE开始

    工作中遇到过一个这样的问题(PL/SQL中):

    有如下类似字符串:vcrRecNaiyo = 'AAA,2013/01/13,"12,345","abc,efg",。。。。'

    字符串中包含逗号,还可能存在双引号,半角空格,全角空格。

    要求:1.去除双引号

           2.去除前后空格(全角,半角)

           3.用null代替双引号中的逗号

    一开始想用trim,replace来做,试了试不好实现。

    最后,在前辈的提示下,使用正则表达式:REGEXP_REPLACE,问题就比较容易解决了。

    我的解决方法:

    1.以(",)来拆分字符串,把拆分后的内容存放到数组A中

    (先计算出字符串中有多少个("),减少循环次数,

    loopCnt = NVL(LENGTHB(REGEXP_REPLACE(vcrRecNaiyo,'[^"]', NULL)), 1))

    2.以(")来拆分数组A中含有(")的内容,存放到数组B中,包含双引号(实现方法如1)

    3.把数组B中含有(")内容的逗号以及(")去掉,不含(")的,以逗号拆分字符串,存放到数组C中

    4.去除数组C中的各种空格

    REGEXP_REPLACE(数组C(m),'[[:blank:]]',''); (m:循环次数)

    结果:AAA,2013/01/13,12345,abcefg,。。。。

    由此查了一下真个表达式的相关内容:

    ORACLE正则表达式

    元字符 字符含义 举例说明
    ^ 匹配字符串的开始位置(在[]中使用时,表示不接受该字符集合)

    ^a:匹配以a开始的字符串

    [^a]:匹配不含a的字符串

    -

    当使用在a-m表示范围;

    当使用在第一个字符时表示连字符串,如[-abc]

     
    $

    匹配字符结束位置

    'a$':匹配以a结束的字符串
    .

    匹配除换行符n之外的任何单字符。

     
    匹配前面的子表达式零次或一次 tr(y(ing)?):可以表示try或者trying
    * 匹配前面的子表达式零次或多次  
    + 匹配前面的子表达式一次或多次  
    () 标记一个子表达式的开始和结束位置 a(b)*可匹配ab,abb,abbb,youabb
    [] 标记一个中括号表达式

    [cd]匹配选择c或d等同于(c|d).

    匹配的是单字符,[^cd]是匹配c,d之外的单字符。

    [a-z]表示所有小写字母。

    {m,n} m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。  
    | 表示或。两个项之间的一个选择 (c|d).匹配选择c或d
    字符簇 字符含义  
    [[:alpha:]] 任何字母  
    [[:digit:]] 任何数字  
    [[:alnum:]] 任何字母和数  
    [[:space:]] 任何白字符  
    [[:upper:]] 任何大写字母  
    [[:lower:]] 任何小写字母  
    [[:punct:]] 任何标点符号  
    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]  

    ORACLE支持正则表达式的内置函数

    名称 语法 备注
    REGEXP_LIKE REGEXP_LIKE(source_string, pattern[, match_parameter])

    source_string:源字符串

    pattern:正则表达式

    match_parameter:匹配模式

    例:查询value中以1开头60结束的记录并且长度是7位。(使用like和REGEXP_LIKE)

    如果value的值是:201306000000626

    select * from fzq where value like '1____60';   检索数据为0记录

    select * from fzq where regexp_like(value,'1....60'); 检索出value值为2013060**的数据

    REGEXP_REPLACE

    REGEXP_REPLACE(source_string, pattern[,replace_string]

    [,position][,occurtence][,match_parameter])

    replace_string:用于替换的字符串

    position:开始搜索的起始位置

    occurtence:指定替换第n次出现字符串

    REGEXP_SUBSTR

    REGEXP_SUBSTR(

    source_string, pattern[,position[,occurrence[,match_parameter]]])

    position:指定字符串中准确位置,默认为1

    occurrence:指定在原字符串匹配过程中相对其他字符串,哪个字符串应该匹配。例:

    select regexp_substr('the zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) from dual

    结果:code

    REGEXP_INSTR

    REGEXP_INSTR(

    source_string,pattern[,start_position[,occurrence[,retrun_option[,match_parameter]]]])

    start_position:开始搜索位置

    occurrence:第n次出现pattern,默认为1

    return_option:

    0:pattern的起始位置

    1:pattern下一个字符起始位置

    默认为0

    REGEXP_COUNT

    REGEXP_COUNT(

    source_string,pattern[[,start_position][,match_parameter]])

    11g新增函数,表示pattern在原字符串中出现的次数

    start_position:开始搜索的位置

  • 相关阅读:
    未能创建可接受的游标。
    怎样修改查看Oracle字符集
    2005年国内各大公司的薪酬一览 同学发给我的,留在这里刺激一下自己,不过他说到了中国工程物理研究院(四川绵阳) 对此不表同意,具体情况我可最清楚呀,哈哈
    破解低价笔记本惊人的秘密
    Struts 的安装、配置与运行zt
    有用的数据:30款市场主流车型真实油耗一览
    JDBC连接Oracle数据库常见问题及解决方法
    查锁的方法
    用Oracle闪回功能恢复偶然丢失的数据数据被误删除了,多亏了万能的oracle,....后怕
    powerdesigner中去掉生成sql中的引号
  • 原文地址:https://www.cnblogs.com/xiaoxiaonvzi/p/3584123.html
Copyright © 2011-2022 走看看