网站建设资讯

NEWS

网站建设资讯

oracle正则怎么用 oracle的正则表达式语法

oracle 如何使用正则表达式匹配出一级域名

匹配完整域名的正则表达式:

创新互联建站专注于企业成都营销网站建设、网站重做改版、诏安网站定制设计、自适应品牌网站建设、H5开发商城网站开发、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为诏安等各大城市提供网站开发制作服务。

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}表达的意思如下:

一个完整的域名,由根域名、顶级域名、二级域名、三级域名……构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过63。

(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?表达的意思如下:

完整的域名至少包括两个名字(比如google.com,由google和com构成),最后可以有一个表示根域的点(在规范中,最后有一个点的才是完整域名,但一般认为包括两个以上名字的域名也是完整域名,哪怕后面没有点)。

如何在oracle中使用正则表达式

regexp_like 2。regexp_substr 3。regexp_instr 4。regexp_replace 看函数名称大概就能猜到有什么用了。 regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,语法很简单: regexp_substr 函数,和 substr 类似,用于拾取合符正则表达式描述的字符子串,语法如下: regexp_instr 函数,和 instr 类似,用于标定符合正则表达式的字符子串的开始位置,语法如下: regexp_replace 函数,和 replace 类似,用于替换符合正则表达式的字符串,语法如下: 这里解析一下几个参数的含义: 1。source_char,输入的字符串,可以是列名或者字符串常量、变量。 2。pattern,正则表达式。 3。match_parameter,匹配选项。 取值范围: i:大小写不敏感; c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;x:扩展模式,忽略正则表达式中的空白字符。 4。position,标识从第几个字符开始正则表达式匹配。 5。occurrence,标识第几个匹配组。 6。replace_string,替换的字符串。 说了一堆文绉绉的,现在开始实例演练了,在此之前先建好一个表。 01 create table tmp as 02 with data as ( 03 select 'like' as id ,'a9999' as str from dual union all 04 select 'like' ,'a9c' from dual union all 05 select 'like' ,'A7007' from dual union all 06 select 'like' ,'123a34cc' from dual union all

在oracle中如何使用正则函数表达式截取每一行中的每一个单元格中有多行数据的第一列?

函数格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr :需要进行正则处理的字符串

__pattern :进行匹配的正则表达式

__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)

__occurrence :标识第几个匹配组,默认为1

__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)

Oracle正则表达式

Oracle g数据库内建了符合IEEE POSIX (Portable Operating System for Unix)标准的正则表达式 熟练使用正则表达式 可以写出简洁 强大的SQL语句

正则表达式有几个优点优于常见的LIKE操作符和INSTR SUBSTR及REPLACE 函数的 这些传统的SQL 函数不便于进行模式匹配 只有LIKE 操作符通过使用%和_字符匹配 但LIKE不支持表达式的重复 复杂的更替 字符范围 字符列表和POSIX 字符类等等

元字符(Meta Character)

Sql代码

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

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

*            匹配 次或更多次

?            匹配 次或 次

+            匹配 次或更多次

{m}          正好匹配 m 次

{m }         至少匹配 m 次

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

[:alpha:]    字母字符

[:lower:]    小写字母字符

[:upper:]    大写字母字符

[:digit:]    数字

[:alnum:]    字母数字字符

[:space:]    空白字符(禁止打印) 如回车符 换行符 竖直制表符和换页符[:punct:]    标点字符

[:cntrl:]    控制字符(禁止打印)

[:print:]    可打印字符 | 分隔替换选项 通常与分组操作符 () 一起使用

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

[char]       字符列表

Oracle g提供了四个regexp function: REGEXP_LIKE REGEXP_REPLACE REGEXP_INSTR REGEXP_SUBSTR

Sql代码

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]]]])  其中各参数的含义为:

Sql代码

srcstr:        被查找的字符数据

pattern:       正则表达式

occurrence:    出现的次数 默认为

position:      开始位置

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

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

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

c case sensitive

I case insensitive

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

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

下面通过一些具体的例子来说明如何使用这四个函数 首先创建一个测试数据表

Sql代码

SQL create table person (

first_name varchar( )

last_name varchar( )

email varchar( )

zip varchar( ));

Table created

SQL insert into person values ( Steven Chen );

row created

SQL insert into person values ( James Li || chr( ) || b d f );

row created

SQL mit;

Commit plete

SQL select * from person;

FIRST_NAME LAST_NAME  EMAIL                ZIP

Steven     Chen              

James      Li               b d f

REGEXP_LIKE

Sql代码

SQL select zip as invalid_zip from person where regexp_like(zip [^[:digit:]] );

INVALID_ZIP

b d f

SQL select first_name from person where regexp_like(first_name ^S *n$ );

FIRST_NAME

Steven

SQL select first_name from person where regexp_like(first_name ^s *n$ );

no rows selected

SQL select first_name from person where regexp_like(first_name ^s *n$ c );

no rows selected

SQL select first_name from person where regexp_like(first_name ^s *n$ i );

FIRST_NAME

Steven

SQL select email from person where regexp_like(email ^james *$ );

no rows selected

SQL select email from person where regexp_like(email ^james *$ n );

EMAIL

SQL select email from person where regexp_like(email ^li *$ );

no rows selected

SQL select email from person where regexp_like(email ^li *$ m );

EMAIL

REGEXP_INSTR

Sql代码

查找zip中第一个非数字字符的位置

SQL select regexp_instr(zip [^[:digit:]] ) as position from person;

POSITION

从第三个字符开始 查找zip中第二个非数字字符的位置

SQL select regexp_instr(zip [^[:digit:]] ) as position from person;

POSITION

从第三个字符开始 查找zip中第二个非数字字符的下一个字符位置

SQL select regexp_instr(zip [^[:digit:]] ) as position from person;

POSITION

REGEXP_SUBSTR

Sql代码

SQL select regexp_substr(zip [^[:digit:]] ) as zip from person;

ZIP

b

SQL select regexp_substr(zip [^[:digit:]] ) as zip from person;

ZIP

f

REGEXP_REPLACE

Sql代码

把zip中所有非数字字符替换为

SQL update person set zip=regexp_replace(zip [^[:digit:]] )

where regexp_like(zip [^[:digit:]] );

row updated

SQL select zip from person;

ZIP

后向引用(backreference)

后向引用是 一个很有用的特性 它能够把子表达式的匹配部分保存在临时缓冲区中 供以后重用 缓冲区从左至右进行编号 并利用 \digit 符号进行访问 子表达式用一组圆括号来显示 利用后向引用可以实现较复杂的替换功能

Sql代码

SQL select regexp_replace( Steven Chen ( *) ( *) \ \ ) 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:]]+$ ));

lishixinzhi/Article/program/Oracle/201311/18745


网站栏目:oracle正则怎么用 oracle的正则表达式语法
文章源于:http://cdweb.net/article/hgejop.html