zoukankan      html  css  js  c++  java
  • 【SQL查询】正则表达式匹配字符串_regexp_like/substr/instr/replace

    1. 元字符说明

    元字符 含义
    ^ 匹配输入字符串的开始位置。
    $ 匹配输入字符串的结尾位置。
    * 匹配前面的字符零次或多次。
    + 匹配前面的字符一次或多次。
    ? 匹配前面的字符零次或一次。
    . 匹配任何字符,除了空.
    | 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
    [ ] 用于指定要在其中尝试匹配列表中任何一个字符的匹配列表。
    [^ ] 用于指定一个不匹配列表,要尝试匹配除列表中的字符之外的任何字符。
    […] 接受括号中的任一字符
    [^…] 不接受括号中的任一字符
    ( ) 标记一个子表达式的开始和结束位置(字符组)。
    {m} 正好匹配   m 次
    {m,} 至少匹配   m 次
    {m,n} 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
    [..]  匹配一个可以是多个字符的排序规则元素。
    [::] 匹配字符类。
    [==] 匹配等价类。
    n是1和9之间的数字。匹配在遇到 之前在()中找到的第n个子表达式。
    d 匹配一个数字字符.
    D 匹配一个非数字字符.
    w 匹配包括下划线的任何单词字符.
    W 匹配任何非单词字符.
    s 任一空白字符,包括制表符,换行符,回车符,换页符和垂直制表符
    S 匹配任何非空白字符.
    A 前面的模式必须位于字符串的开始位置,忽略多行标志
     前面的模式必须位于字符串的未端,或者位于一个换行符前
    *?  与前前面的模式匹配零个或多个匹配项。
    +? 匹配前面一个模式一次或多次。
    ?? 匹配前面一个模式零或一个发生。
    {n}? 匹配前面的模式n次。
    {n,}? 与前一个模式匹配至少n次
    {n,m}? 与前一个模式匹配至少n次,但不超过m次。

    2. oracle正则表达式的4个函数

      (1) regexp_like

        1) 语法

          REGEXP_LIKE ( expression, pattern [, match_parameter ] )

        2) 参数说明

          expression:字符表达式

          pattern:正则表达式

          match_parameter:可选的。它允许修改REGEXP_LIKE条件的匹配行为。它可以是以下的组合:

    描述
    'c' 执行区分大小写匹配。
    'i' 执行不区分大小写的匹配。
    'n' 允许句点字符(.)与换行符匹配。 默认情况下,句点是通配符。
    'm' 表达式假定有多个行,其中^是行的开始,$是行的结尾,不管表达式中这些字符的位置如何。默认情况下,表达式假定为单行。
    'x' 忽略空格字符。默认情况下,空格字符与任何其他字符一样匹配。

        3) 示例

    --与like的功能类似
    select * from fzq where regexp_like(value,'1....60');

      (2) regexp_substr

        1) 语法

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

        2) 参数说明

          source_string:源串,可以是常量,也可以是某个值类型为串的列。

          pattern:正则表达式

          position:从源串开始搜索的位置。默认为1。

          occurrence:指定源串中的第几次出现。默认值1.

          match_parameter:省略该参数时:默认区分大小写、句点不匹配换行符、源串被看作一行。

    说明
    i'     用于不区分大小写的匹配。
    c' 用于区分大小写的匹配。
    n' 允许将句点“.”作为通配符来匹配换行符。如果省略改参数,句点将不匹配换行符。
    m'  将源串视为多行。即将“^”和“$”分别看做源串中任意位置任意行的开始和结束,而不是看作整个源串的开始或结束。

        3) 示例

    SELECT REGEXP_SUBSTR ('hello my phone is 520 ', '[0-9]+') FROM dual; --520

      (3) regexp_instr

        1) 语法

          regexp_instr(source_string,pattern[,position[,occurrence[,return_option[,match_parameter]]]])

        2) 参数说明

          source_string:源串,可以是常量,也可以是某个值类型为串的列。

          pattern:正则表达式

          position:可选。搜索在字符串中的开始位置。如果省略,则默认为1,这是字符串中的第一个位置。

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

          return_option:可选 指定Oracle返回的位置。如果指定0,那么Oracle将返回出现的第一个字符的位置。这是默认的。如果指定1,则Oracle返回字符之后发生的位置。

          match_parameter:可选。它允许你修改REGEXP_INSTR功能匹配的行为。它可以是以下的组合:

    描述
    'c' 执行区分大小写匹配。
    'i' 执行不区分大小写的匹配。
    'n' 允许句点字符(.)与换行符匹配。 默认情况下,句点是通配符。
    'm' 表达式假定有多个行,其中^是行的开始,$是行的结尾,不管表达式中这些字符的位置如何。默认情况下,表达式假定为单行。
    'x' 忽略空格字符。默认情况下,空格字符与任何其他字符一样匹配。

        3) 示例

    SELECT REGEXP_INSTR ('Itmyhome', 'a|i|o|e|u')
    FROM dual;
    
    -- Result: 6

      (4) regexp_replace

        1) 语法

          regexp_replace(source_string,pattern[,replace_string[,position[,occurrence[,match_parameter]]]])

        2) 参数说明

          source_string:源串,可以是常量,也可以是某个值类型为串的列。

          pattern:正则表达式

          replace_string:可选。匹配的模式将被替换replace_string字符串。如果省略replace_string参数,将删除所有匹配的模式,并返回结果字符串。

          position:可选。在字符串中的开始位置搜索。如果省略,则默认为1。

          occurrence:可选。是一个非负整数默认为1,指示替换操作的发生:如果指定0,那么所有出现将被替换字符串。如果指定了正整数n,那么将替换第n次出现。

          match_parameter:可选。它允许你修改REGEXP_REPLACE功能匹配的行为。它可以是以下的组合:

    描述
    'c' 执行区分大小写匹配。
    'i' 执行不区分大小写的匹配。
    'n' 允许句点字符(.)与换行符匹配。 默认情况下,句点是通配符。
    'm' 表达式假定有多个行,其中^是行的开始,$是行的结尾,不管表达式中这些字符的位置如何。默认情况下,表达式假定为单行。
    'x' 忽略空格字符。默认情况下,空格字符与任何其他字符一样匹配。

        3) 示例   

    SELECT REGEXP_REPLACE ('itmyhome is my network id', '^(S*)', 'luck')
    FROM dual;
    
    Result: luck is my network id
  • 相关阅读:
    ARP病毒的分析与防治思路
    sqlserver存储过程参数拼接
    自定义函数
    asp.net 文件流操作
    asp.net 国际化
    一个用户登录权限的基本例子
    更新密码,判断旧密码存储过程
    SQLSerVer计算1100之间所有能被3整除的数的个数及总和
    等待2小时2分零10秒后才执行sql语句
    C#实现按日期命名上传文件代码
  • 原文地址:https://www.cnblogs.com/zhuhaiying/p/9842213.html
Copyright © 2011-2022 走看看