oracle 正则表达式 匹配
在实际应用中,想排除带有中文的字段值:
字符串’^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 sensitiveI:case insensitiven:(.)匹配任何字符(包括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位里包含13或5 表达式为 [35]{1},即第二位包含有3或5的9位数字结束 为: [[:digit:]]{9}$ 这里[:digit:]为特殊写法,代表为数字,再加个结束符$。即最后9位是数字。#######################################################################后向引用(backreference):后向引用是一个很有用的特性。它能够把子表达式的匹配部分保存在临时缓冲区中,供以后重用。缓冲区从左至右进行编号,并利用 \digit 符号进行访问。子表达式用一组圆括号来显示。利用后向引用可以实现较复杂的替换功能。下面的regexp_replace('Steven Chen', '(.*) (.*)', '\2, \1') 此函数中,首先在正则表达式函数中,('Steven Chen', '(.*) (.*)', 其中两个圆括号中会匹配出Chen, Steven;再使用"\数字“的符号进行引用。123456789
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 正则表达式 匹配的更多相关文章
- oracle正则表达式语法介绍及实现手机号码匹配方法
Oracle10g提供了在查询中使用正则表达的功能,它是通过各种支持正则表达式的函数在where子句中实现的.本文将简单的介绍oracle正则表达式常用语法,并通过一个手机特号匹配的例子演示正则表达式 ...
- Oracle正则表达式之匹配网址
利于正则表达式匹配出网址 --1 表准备create table test_regexp( object varchar2(50)); --2 数据准备 insert into test_regexp ...
- Oracle正则表达式之匹配邮箱
利于正则表达式匹配出符合电子邮箱的数据 --1 表准备create table test_regexp( object varchar2(50)); --2 数据准备 insert into test ...
- oracle正则表达式的用法
<SPAN style="FONT-SIZE: 18px">Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子 .5个参数 第一个是输入的字符串 第二个 ...
- Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace
Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace --去掉所有特殊字符,只剩字母 SELECT REGEXP ...
- Oracle正则表达式
Oracle正则表达式 正则表达式具有强大.便捷.高效的文本处理功能.能够添加.删除.分析.叠加.插入和修整各种类型的文本和数据.Oracle从10g开始支持正则表达式. 下面通过一些例子来说明 ...
- oracle正则表达式regexp_like的用法详解
oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...
- 【SQL查询】正则表达式匹配字符串
1. 元字符说明 元字符 含义 ^ 匹配输入字符串的开始位置. $ 匹配输入字符串的结尾位置. * 匹配前面的字符零次或多次. + 匹配前面的字符一次或多次. ? 匹配前面的字符零次或一次. . 匹配 ...
- 转 oracle 正则表达式和查询最大文件号 SQL
###sample 1 https://www.cnblogs.com/lxl57610/p/8227599.html Oracle使用正则表达式离不开这4个函数: 1.regexp_like 2.r ...
随机推荐
- Spring Batch 介绍
在企业应用的关键环境中,通常有需要很多应用来来处理大量的应用.这商业操作包括了自动化,并且负责的处理程序来对大量数据进行高效的处理,通常这些程序不需要人工进行干预.这些事件包括有基于时间周期产生的操作 ...
- CentOS7 下源代码安装apache2.4
Apache httpd 2.4 源代码安装 https://httpd.apache.org/docs/2.4/install.html 这里选用Apache2.4版本. wget http ...
- JSX语法
什么是JSX语法:就是符合 xml 规范的 JS 语法:(语法格式相对来说,要比HTML严谨很多) 1. 如何启用 jsx 语法? 安装 `babel` 插件 - 运行`cnpm i babel-co ...
- thinkphp3.1.3导入
1.首先我们做导入一定要在我们的项目中导入一个 PHPExcel 下载地址:http://phpexcel.codeplex.com/ 2.下载之后就解压我们就可以看到像这样子的文件 3.就 ...
- nyoj-1015-二分图判定
二部图 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图.证 ...
- 9. Palindrome Number(回文数)C++
将int转换为string,注意for循环判断条件的简化 class Solution { public: bool isPalindrome(int x) { ) return false; str ...
- EF - Database First 开发方式
概述 Database First 又叫数据库优先的开发方式,是一种比较旧的开发方式,现在越来越多的企业已经不再使用此种开发方式. 当然,对于一些旧项目进行升级,在已经有了数据库的情况下,使用此种方式 ...
- Cassandra V2.1.20单机安装
1. 系统调优 [root@sht-sgmhadoopcm- ~]# echo "vm.max_map_count=131072" >> /etc/sysctl.con ...
- 码云插件Gitee:Couldn't get the list of Gitee repositories
20:02 Couldn't get the list of Gitee repositories Can't get available repositories Not Found
- Git:创建远程仓库并推送内容到远程库
1.添加远程仓库 1.1点击该按钮创建一个新仓库 2.推送到远程仓库 2.1根据GitHub的提示,在本地的learngit仓库下运行命令git remote add origin https://g ...