• 正则表达式


      正则表达式,英文名是:Regular Expression。直译就是有规律的表达式,整齐的表达式。什么是表达式?表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。归根到底,正则表达式也是表达式的一种,它是什么样的表达式呢?有规律的表达式。然后在看看正则表达式的用途——字符串处理。所以,什么是正则表达式?正则表达式就是匹配出符合特定规律的字符串的符号组合。

    Oracle SQL

      下表是正则表达式部分元字符的解释(符合POSIX标准):

    ^           

    使表达式定位至一行的开头

    $

    使表达式定位至一行的末尾

    *

    匹配 0 次或更多次

    ?

    匹配 0 次或 1 次

    +

    匹配 1 次或更多次

    {m}

    正好匹配 m 次

    {m,}

    至少匹配 m 次

    {m,n}

    至少匹配 m 次但不超过 n 次

    [:alpha:]

    字母字符

    [:lower:]

    小写字母字符

    [:upper:]

    大写字母字符

    [:digit:]

    数字

    [:alnum:]

    字母数字字符

    [:space:]

    空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符

    [:punct:]

    标点字符

    ...)

    将子表达式分组为一个替换单元、量词单元或后向引用单元  

    [...]      

    匹配列表中的字符

    [^...]

    匹配不在列表中的字符

      Oracle提供了四个支持正则表达式的函数REGEXP_LIKE , REGEXP_REPLACE , REGEXP_INSTR , REGEXP_SUBSTR 。

      REGEXP_LIKE:比较一个字符串是否与正则表达式匹配  

        (srcstr, pattern [, match_option])  

      REGEXP_INSTR:在字符串中查找正则表达式,并且返回匹配的位置 

        (srcstr, pattern [, position [, occurrence [, return_option [, match_option]]]])  

      REGEXP_SUBSTR:返回与正则表达式匹配的子字符串  

        (srcstr, pattern [, position [, occurrence [, match_option]]])    

      REGEXP_REPLACE:搜索并且替换匹配的正则表达式  

        (srcstr, pattern [, replacestr [, position [, occurrence [, match_option]]]])

      其中各参数的含义为:

      srcstr: 被查找的字符数据,可以是列和绑定变量等   

      pattern: 正则表达式。  

      occurrence: 出现的次数。默认为1。  

      position: 开始位置  

    return_option: 默认值为0,返回该模式的起始位置;值为1则返回符合匹配条件的下一个字符的起始位置。  

    replacestr:    用来替换匹配模式的字符串。  

    match_option:  匹配方式选项。缺省为c。  

                   c:case sensitive  

                   I:case insensitive 

                   n:(.)匹配任何字符(包括newline)  

                   m:字符串存在换行的时候被作为多行处理

    下面提供一些实例,推荐使用 PLSQL Developer ,CMD实在是有点揪心。

    首先创建测试表TEST,并插入测试数据:

    create table test (c1 int , testcol varchar2(100));
    insert into test values(100,'10d6h2');
    insert into test values(110,'100025');
    insert into test values(120,'gift');
    insert into test values(130,'01083697902');
    insert into test values(140,'010-400-7591');
    insert into test values(150,'ab c de');
    insert into test values(160,'abcde');
    insert into test values(170,'tianjie@oracle.com'|| chr(10) ||'liuy@sina.com.cn');
    insert into test values(180,'Steven');
    insert into test values(190,'bac');
    insert into test values(200,'Stephen');
    commit;

    一、REGEXP_LIKE测试

    1. 找到表中testcol列只包含数字的记录

    select * from test where regexp_like(testcol,'^[0-9]+$');

    2. 找到表中testcol列只包含6个数字的记录

    select * from test where regexp_like(testcol,'^[0-9]{6}$');

    3. 当然上面2的语句也可以使用下面的写法

    select * from test where regexp_like(testcol,'^d{6}$');

    4. 找到表中testcol列包含以Ste开头,中间是v或者是ph,以en结尾的字符串记录

    select * from test where regexp_like(testcol,'^Ste(v|ph)en$');

    5. 上面的语句默认是区分大小写的,如果要不区分大小写的话,可以考虑使用'i'

    select * from test where regexp_like(testcol,'^ste(v|ph)en$');

    select * from test where regexp_like(testcol,'^ste(v|ph)en$','i');

    to be continued...

  • 相关阅读:
    扩展GridView控件增加选择列
    Flash图片轮换/切换左右推拉效果
    Flash图片轮换/切换普通效果1
    WebForm_PostBackOptions未定义 解决方法
    SQL Server 2008无法还原日志备份或差异备份的问题解决(转)
    一个简单的C#多线程间同步的例子.[转]
    SQL2008报错:无法还原日志备份或差异备份,因为没有文件可用于前滚(转)
    C# 字符、字符串过滤,只能输入数字、中文、英文、大写、小写(转)
    C# Monitor类锁定对象
    使用SqlServer中的float类型时发现的问题(转)
  • 原文地址:https://www.cnblogs.com/ddhjy/p/4149205.html
Copyright © 2020-2023  润新知