oracle 正则表达式

在实际应用中,想排除带有中文的字段值:

select h.froomnumber from t_broker_house h where REGEXP_LIKE(froomnumber,'^([a-z0-9A-Z]|-)*$')
 

字符串’^198[0-9]$’可以匹配‘1980-1989’,如果希望统计出公司那些员工是80年~89年入职的,就可以使用如下的SQL语句:

select * from emp e where regexp_like(to_char( e.hiredate,'yyyy'),'^198[0-9]$');

正则表达式中常用到的元数据(metacharacter)如下:

^ 匹配字符串的开头位置。

$ 匹配支付传的结尾位置。

* 匹配该字符前面的一个字符0次,1次或者多次出现。例如52*oracle 可以匹配 5oracle,52oracle,522oracle,5222oracle等等。

+ 匹配该字符前面的一个字符1次或者多次出现。例如52+oracle 可以匹配 52oracle,522oracle,5222oracle等等

? 匹配该字符前面的一个字符0次或1次或者多次出现。例如52?oracle 只能匹配5oracle,52oracle等等

{n} 匹配一个字符串n次,n为正整数。例如:hel{2}o 所匹配的是hello

{n,m} 匹配一个字符串至少n次,至多m次。其中n和m都是整数。

. 匹配除了null之外的任何单个字符串

(pattern) 这个是用来匹配指定模式的一个子表达式

x|y 匹配x或者y,其中x和y是一个或者多个字符

[abc] 匹配括号中的任意一个字符。例如:[ab]bc可以匹配abc和bbc

[a-z] 匹配指定范围内的任意字符串。例如[A-G]hi可以匹配Ahi至Ghi

[::]指定一个字符类,可以匹配该类中的任意字符 这里的字符类包括:

[:alphanum:] 可以匹配字符0-9、A-Z、a-z

[:alpha:]可以匹配字符A-Z、a-z

[:blank:]可以匹配空格或者tab键

[:digit:]可以匹配数字 0-9

[:gragh:]可以匹配非空字符

[:punct:]可以匹配. , ” ‘等标点符号。

[:upper:]可以匹配字符A-Z

[:lower:]可以匹配字符a-z

关于orace中的正则表达式只能通过oracle特意为正则表达式设计的4个函数来使用。

这4个函数分别是:

regexp_like,regexp_instr,regexp_replace,regexp_substr。

ORACLE正则表达式函数详解
  
ORACLE正则表达式函数详解
 
Oracle10g提供了四个正则表达式函数regexp function: 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:字符串存在换行的时候被作为多行处理  
##################################################################################
正则表达式由以下标准的元字符(metacharacters)所构成:
字符
[[:alpha:]]任何字母。[A-Za-z]
[[:digit:]]任何数字。[0-9]
[[:alnum:]]任何字母和数字。[A-Za-z0-9]
[:blank:]   [ ],标准是空格和TAB,但Oracle里只有空格!
[:cntrl:]   CONTROL键
[:graph:]  即所有可见字符,不包括空格
[:print:]  可打印字符 ,即空格+所有可见字符
[[:space:]] 空白字符。
[[:punct:]] 任何标点符号。
[[:upper:]] 任何大写字母。[A-Z]
[[:lower:]] 任何小写字母。[a-z]
[[:xdigit:]]任何16进制的数字,相当于[0-9a-fA-F]。
#######
[:class:]   字符类。class如alnum、digit等。
[.element.] 整理类。受NLS_SORT影响。将多字节字符当作单字节字符看待。如在西班牙语中ch、ll都是用多字节表示的单字节。
[=char=]    等同类。在当前语言(Locale)下,匹配所有的属于相同的POSIX等同类字符指定的字符。如在西班牙语中,[[=n=]]指定了等同类字符n,它可以匹配El Ni?o中的N和 ?.
###########################################################################
边界符集合
^   每一行的开头,单行模式下等价于字符串的开头
$   每一行的结尾,单行模式下等价于字符串的结尾
在单行模式下,^和\A等价,$和\Z等价。
##########################################################################
重复次数集合
*   匹配零次或多次--尽可能多的次数
?   零次或一次
+   一次或多次
{m} {m}?正好m次,贪婪与非贪婪一样的
{m,}    {m,}?至少m次
{m, n}  {m, n}?最少m最多n次
在上述字符后加?,如:*?,即为非贪婪模式。
贪婪模式会获取尽可能多的字符,而非贪婪模式会获取尽可能少的字符
###############################################################
组合操作符
[…]     方括号内任意字符或字符集合中的一个。在其中所有的操作符号都被视为普通符号,但以下除外:
★范围操作符:- 但当"-"位于字符列表的第一个或最后一个字符时,或位于范围的结尾时,会被当作"-"本身来看待。
当右方括号"]"出现在列表的第一个位置时,它会被当作"]"本身来处理。
[^…]    方括号内^为第一个字符时,表示与其后所有字符都不匹配的字符
(…)     圆括号,将复杂表达式当作单一表达式来处理
..|..    或
abc      和。直接将字符连在一起写
优先级比较:圆括号>重复次数操作符>和>或。
例如,(f|ht)tps?: 表示
ftp:
ftps:
http:
https:
######################################################################
匹配操作符
\n      即后向引用。n为1~9,标识由圆括号里取得的匹配字符串。方向是从左到右。
转义操作符
\       将其后紧跟着的操作字符当作普通字符看待。
例如 abc*def 可以匹配 abdef或abcccdef等,但无法匹配abc*def,后者需要abc\*def才能匹配
##################################################
一条正则表达式匹配函数示例解析:
SELECT * FORM tKHXX where  REGEXP_LIKE(SJHM,  '^[1]{1}[35]{1}[[:digit:]]{9}$' ) 
这个语句是从表中查手机号。
^ 表示开始
$ 表示结束 
[]内部为匹配范围
{}里的内容表时个数
手机号码的特点是以 1开头接着是3或5再加9位的数字 所以这么理解
1开头 表达式为 ^[1]{1} 意为 开始1位里包含1
3或5 表达式为 [35]{1},即第二位包含有3或5的
9位数字结束 为: [[:digit:]]{9}$ 这里[:digit:]为特殊写法,代表为数字,再加个结束符$。即最后9位是数字。
####################################################################### 
后向引用(backreference):
后向引用是一个很有用的特性。它能够把子表达式的匹配部分保存在临时缓冲区中,供以后重用。缓冲区从左至右进行编号,并利用 \digit 符号进行访问。子表达式用一组圆括号来显示。利用后向引用可以实现较复杂的替换功能。  
下面的regexp_replace('Steven Chen', '(.*) (.*)', '\2, \1')  此函数中,首先在正则表达式函数中,('Steven Chen', '(.*) (.*)', 其中两个圆括号中会匹配出Chen, Steven;再使用"\数字“的符号进行引用。
1
2
3
4
5
6
7
8
9
    SQL> select regexp_replace('Steven Chen', '(.*) (.*)', '\2, \1') as reversed_name from dual;       
    REVERSED_NAME 
    -------------------- 
    Chen, Steven 
在DDL中也可以正则表达式,比如Constraint, index, view
Sql代码 
    SQL> alter table person add constraint constraint_zip check (regexp_like(zip, '^[[:digit:]]+$')); 
       
    SQL> create index person_idx on person(regexp_substr(last_name, '^[[:upper:]]'));

http://blog.sina.com.cn/s/blog_69e7b8d701012tuj.html

oracle 正则表达式 匹配的更多相关文章

  1. oracle正则表达式语法介绍及实现手机号码匹配方法

    Oracle10g提供了在查询中使用正则表达的功能,它是通过各种支持正则表达式的函数在where子句中实现的.本文将简单的介绍oracle正则表达式常用语法,并通过一个手机特号匹配的例子演示正则表达式 ...

  2. Oracle正则表达式之匹配网址

    利于正则表达式匹配出网址 --1 表准备create table test_regexp( object varchar2(50)); --2 数据准备 insert into test_regexp ...

  3. Oracle正则表达式之匹配邮箱

    利于正则表达式匹配出符合电子邮箱的数据 --1 表准备create table test_regexp( object varchar2(50)); --2 数据准备 insert into test ...

  4. oracle正则表达式的用法

    <SPAN style="FONT-SIZE: 18px">Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子 .5个参数 第一个是输入的字符串 第二个 ...

  5. Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace

    Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace   --去掉所有特殊字符,只剩字母  SELECT REGEXP ...

  6. Oracle正则表达式

       Oracle正则表达式 正则表达式具有强大.便捷.高效的文本处理功能.能够添加.删除.分析.叠加.插入和修整各种类型的文本和数据.Oracle从10g开始支持正则表达式. 下面通过一些例子来说明 ...

  7. oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...

  8. 【SQL查询】正则表达式匹配字符串

    1. 元字符说明 元字符 含义 ^ 匹配输入字符串的开始位置. $ 匹配输入字符串的结尾位置. * 匹配前面的字符零次或多次. + 匹配前面的字符一次或多次. ? 匹配前面的字符零次或一次. . 匹配 ...

  9. 转 oracle 正则表达式和查询最大文件号 SQL

    ###sample 1 https://www.cnblogs.com/lxl57610/p/8227599.html Oracle使用正则表达式离不开这4个函数: 1.regexp_like 2.r ...

随机推荐

  1. 20181013xlVba计算优秀率及合格率

    Sub 计算高一优秀合格率() Dim Wb As Workbook Dim Sht As Worksheet Dim oSht As Worksheet Dim dOs As Object 'Out ...

  2. MyEclipse6.5的SVN插件的安装

    在线安装 1. 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Install; 2. 选择Search for new features to i ...

  3. 378. Kth Smallest Element in a Sorted Matrix(java,优先队列)

    题目: Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the ...

  4. mysql分组统计以及全部统计union all使用

    select '全部' AS `organ_category`, COUNT(*) AS amount FROM `organ_new` WHERE `city_code` ='SZ0755' AND ...

  5. spring-mvc实现模拟数据到网页展示过程代码

    spring-mvc实现模拟数据到网页展示过程代码 先看看我们的3种模拟数据到网页展示的思路图: 1.当mybatis的环境配置完成.一个动态Web项目建立好.开始导入jar包. -spring的ao ...

  6. 使用Spring-data-jpa(1)(三十)

    在实际开发过程中,对数据库的操作无非就“增删改查”.就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量类似而枯燥的语句来完成业务逻辑. 为了解决这些大量枯燥的数据操作语句 ...

  7. span 超出部分换行

    span{ word-break: normal; width: auto; display: block; white-space: pre-wrap; word-wrap: break-word; ...

  8. Matlab远程调试 转

        Matlab的调试总体分为,直接调试和间接调试.1.直接调试:(1)去掉句末的分号:(2)单独调试一个函数:将第一行的函数声明注释掉,并定义输入量,以脚本方式执行 M 文件:(3)适当地方添加 ...

  9. jquery自定义类的封装

    如何用jquery自定义一个类?(demo参考) /*简单使用*/ (function($){ //el操纵对象,option属性值 $.love = function(el,option){ var ...

  10. react router @4 和 vue路由 详解(四)vue如何在路由里面定义一个子路由

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 6.vue如何在路由里面定义一个子路由? 给父路由加一个 children:[] 参考我 ...