• oracle的正则表达式,


    根据定义的规律进行数据的检索、添加、删除、分析、叠加、插入和修整。

    Oracle使用正则表达式离不开这4个函数:

    1。regexp_like

    2。regexp_substr

    3。regexp_instr

    4。regexp_replace

    看函数名称大概就能猜到有什么用了。

    1.regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,

    语法很简单:

    regexp_like(source_char,pattern,match_parameter)

    2.regexp_substr 函数,和 substr 类似,用于拾取合符正则表达式描述的字符子串,

    语法如下:

    regexp_substr(source_char,pattern,position,occurrence,match_parameter)

    3.regexp_instr 函数,和 instr 类似,用于标定符合正则表达式的字符子串的开始位置,

    语法如下:

    regexp_instr(source_char,pattern,position,occurrence,return_option,match_parameter)

    4.regexp_replace 函数,和 replace 类似,用于替换符合正则表达式的字符串,

    语法如下:

    regexp_replace(source_char,pattern,replace_string,position,occurrence,match_parameter)

    这里解析一下几个参数的含义:

    1。source_char,输入的字符串源,

    2。pattern,正则表达式。

    3。match_parameter,匹配选项。

            取值范围: i:大小写不敏感; c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;x:扩展模式,忽略正则表达式中的空白字符。

    4。position,标识从第几个字符开始正则表达式匹配。可选。搜索在字符串中的开始位置。如果省略,默认为1,这是第一个位置的字符串。

    5。occurrence,标识第几个匹配组。可选。它是模式字符串中的第n个匹配位置。如果省略,默认为1。

    6。replace_string,替换的字符串。

    描述
    1.^ 匹配一个字符串的开始。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的开头。
    2.$ 匹配字符串的结尾。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的末尾。
    3.* 匹配零个或多个。
    4.+ 匹配一个或多个出现。
    5.? 匹配零次或一次出现。
    6.。 匹配任何字符,除了空。
    7.| 用“OR”来指定多个选项。
    8.[] 用于指定一个匹配列表,您尝试匹配列表中的任何一个字符。
    9.[^] 用于指定一个不匹配的列表,您尝试匹配除列表中的字符以外的任何字符。
    10.() 用于将表达式分组为一个子表达式。
    11.{M} 匹配m次。
    12.{M,} 至少匹配m次。
    13.{M,N} 至少匹配m次,但不多于n次。
    14. n n是1到9之间的数字。在遇到 n之前匹配在()内找到的第n个子表达式。
    15.[..] 匹配一个可以多于一个字符的整理元素。
    15.[:] 匹配字符类。
    16.[==] 匹配等价类。
    17. d 匹配一个数字字符。
    18. D 匹配一个非数字字符。
    19. w 匹配包括下划线的任何单词字符。
    20. W 匹配任何非单词字符。
    21. s 匹配任何空白字符,包括空格,制表符,换页符等等。
    22. S 匹配任何非空白字符。
    23.A 在换行符之前匹配字符串的开头或匹配字符串的末尾。
    24. 匹配字符串的末尾。
    25.*? 匹配前面的模式零次或多次发生。
    26.+? 匹配前面的模式一个或多个事件。
    27.?? 匹配前面的模式零次或一次出现。
    28.{N}? 匹配前面的模式n次。
    29.{N,}? 匹配前面的模式至少n次。
    30.{N,M}? 匹配前面的模式至少n次,但不超过m次。

    说了一堆文绉绉的,现在开始实例演练了。

     
    select * from tmp ;
    ID             STR
    -------     -------------
    like        a9999
    like        a9c
    like        A7007
    like        123a34cc
    like aa
    like 2b3
    like b
    substr 123,234,345
    substr      12,34.56:78
    substr      123456789
    instr       192.168.0.1
    replace     (020)12345678
    replace     001517729C28



    regexp_like 例子:                --把满足条件的数据出来

    语法:regexp_like(source_char,pattern,match_parameter)

    1.select str from tmp where id='like' and regexp_like(str,'Ad+','i'); -- 'i' 忽略大小写
    表达式的意思:A就是字母'A',d匹配一个数字字符,+匹配一个或多个出现,'i' 忽略大小写

    结果:
    id str
    like a999
    like a9c
    like A7007
    like 123a34cc
    2.select str from tmp where id='like' and regexp_like(str,'bd+','i');
    结果:2b3

    3.select str from tmp where id='like' and regexp_like(str,'Ad+','i');
    结果:A7007


    4. select str from tmp where id='like' and regexp_like(str,'^ad+'); STR ------------- a9999 a9c
    select str from tmp where id='like' and regexp_like(str,'^ad+$'); STR ------------- a9999


    2.select str from tmp where id='like' and regexp_like(str,'Ad+','i'); -- 'i' 忽略大小写
    表达式的意思:A就是字母'A',d匹配一个数字字符,+匹配一个或多个出现,'i' 忽略大小写
    STR ------------- a9999 a9c A7007 123a34cc
    select str from tmp where id='like' and regexp_like(str, 'ad+');

    STR ------------- a9999 a9c 123a34cc
     select str from tmp where id='like' and regexp_like(str,'^ad+'); STR ------------- a9999 a9c
    select str from tmp where id='like' and regexp_like(str,'^ad+$'); STR ------------- a9999

    regexp_substr 例子:



    regex_instr 例子:

    select
      str,
      regexp_instr(str,'.'    ) ind1 ,
      regexp_instr(str,'.',1,2) ind2 ,
      regexp_instr(str,'.',5,2) ind3
    from tmp where id='instr';
    STR IND1 IND2 IND3 --------------- ----- ----- ----- 192.168.0.1 4 8 10 select regexp_instr('192.168.0.1','.',1,level) ind , -- 点号. 所在的位置 regexp_instr('192.168.0.1','d',1,level) ind -- 每个数字的位置 from dual connect by level <= 9 IND IND ----- ----- 4 1 8 2 10 3 0 5 0 6 0 7 0 9 0 11 0 0

    regex_replace 例子:

    select
      str,
      regexp_replace(str,'020','GZ') str1,
      regexp_replace(str,'(d{3})(d{3})','<21>') str2 -- 将第一、第二捕获组交换位置,用尖括号标识出来
    from tmp
    where id='replace'; 
    STR str1 Str2 --------------- --------------- --------------- (020)12345678 (GZ)12345678 (020)<456123>78 001517729C28 001517729C28 <517001>729C28


    --上面regexp_replace(str,'020','GZ')是遇到'020'就用'GZ'替换
    
    

    SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', 'd', '#')
    FROM dual;

    Result: '#, #, and ## are numbers in this example'

    此示例将所指定的d数字将以#字符替换

    我们可以改变我们的正则模式来搜索仅两位数字。

    SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', '(d)(d)', '#')
    FROM dual;

    Result: '2, 5, and # are numbers in this example'

    这个例子将替换具有两个数字并排指定的(d)(d)模式。在这种情况下,它将跳过2和5个数字值和用#字符替换10。



    综合应用的例子:

    SELECT REGEXP_REPLACE ('itmyhome is my network id', '^(S*)', 'luck')
    FROM dual;

    Result: luck is my network id

    这个例子会返回”luck is my network id”,

    上面的 '^(S*)'就是不为空的意思

    因为它会再字符串的开始找到第一个匹配的字符,然后替换为”luck”
    ---------------------------

  • 相关阅读:
    f5版本升级
    f5申请并激活License
    f5时间设置
    f5 SNMP配置
    f5 Syslog管理
    f5单台安装配置
    f5负载均衡算法
    f5 Seldom used
    f5售后查询
    f5基本介绍
  • 原文地址:https://www.cnblogs.com/thomasbc/p/12526913.html
Copyright © 2020-2023  润新知