zoukankan      html  css  js  c++  java
  • [每日一题] OCP1z0-047 :2013-08-22 正则表达式---[^Ale|ax.r$]'

    正确答案:DE

     

    一、Oracle正则表达式的相关知识点

    '[^Ale|ax.r$]':

    ^:匹配行的开始字符

    $:匹配行的结束字符

    []:方括号表示指定一个匹配列表,该列表匹配列表中显示的任何表达式。

    [^]:同上面相反,非匹配列表表达工。

    .:匹配任意一个字符(除了NULL)

    |:替换元字符;结束第一个选项并开始下一个替换表达式

    [^Ale|ax.r$]'中^表示只匹配不在集合{'A','l','e','|','a','x','.','r','$'}中的字符, 此处的'|'、'.'、'$'只是表示普通的字符,而非匹配符。字符串: [Ale|ax.r$] 匹配Alex,Alax ,Alxer ,A,l,e,a.............

    不包含 A l e a x r的串,等效于[^Aleaxr],只要在串里面找到符合条件的字符(哪怕就一个)就算匹配。

    先来看一下答案:

    gyj@MYDB> with gyj_test as (
      2   select 'Alex' name from dual
      3   union all
      4   select 'Alax' name from dual
      5   union all
      6   select 'Alxer' name from dual
      7   union all
      8   select 'Alexender' name from dual
      9   union all
     10   select 'Alexendar' name from dual)
     11   select * from gyj_test where  regexp_like(name,'[^Ale|ax.r$]');
    
    NAME
    ---------
    Alexender
    Alexendar
    


     

    二、分析:

     '^Ale|ax.r$'――表示匹配Ale或ax开头的字符串,.表示任一字符。

    gyj@MYDB> create table gyj_test1 (id int,name varchar2(20));
    
    Table created.
    
    gyj@MYDB> insert into gyj_test1 values(1,'Alex');
    
    1 row created.
    
    gyj@MYDB> insert into gyj_test1 values(2,'Alax');
    
    1 row created.
    
    gyj@MYDB> insert into gyj_test1 values(3,'Alxer');
    
    1 row created.
    
    gyj@MYDB> insert into gyj_test1 values(4,'Alexender');
    
    1 row created.
    
    gyj@MYDB> insert into gyj_test1 values(4,'Alexendar');
    
    1 row created.
    
    gyj@MYDB> commit;
    
    Commit complete.


     

    gyj@MYDB> select * from gyj_test1 where regexp_like(name,'^Ale|ax.r$');
    
            ID NAME
    ---------- --------------------
             1 Alex
             4 Alexender
             4 Alexendar


     

    三、以上的SQL语句等价于:

    gyj@MYDB> select * from gyj_test1 where  regexp_like(name,'^Ale')
      2   union all
      3   select * from gyj_test1 where  regexp_like(name,'ax.r$');
    
            ID NAME
    ---------- --------------------
             1 Alex
             4 Alexender
             4 Alexendar
    


     

    四、^出现在[]中表示否定,查询的结果集里含有不是中括号里的字母Aleaxr

    gyj@MYDB> select * from gyj_test1 where  regexp_like(name,'[^Ale|ax.r$]');
    
            ID NAME
    ---------- --------------------
             4 Alexender
             4 Alexendar
    


     

  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/pangblog/p/3278191.html
Copyright © 2011-2022 走看看