求一条oracle的正则表达式select regexp_replace('LINESTRING ( 125.64344940 0.37195987, 125.64392414 0.37187532, 125.64415436 0.37192475, 125.64430914 0.37210554, 125.64433906 0.37221870)','\(([^\)] )','$1') regfield from dual
用regexp_replace
Oracle正则表达式【oracle正则怎么写 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_NAMEEMAILZIP
StevenChen
JamesLib 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的正则表达式(10g才可以用)
oracle的正则表达式(regular expression)简单介绍
目前,正则表达式已经在很多软件中得到广泛的应用 , 包括*nix(Linux, Unix等),HP等操作系统 , PHP , C#,Java等开发环境 。
Oracle 10g正则表达式提高了SQL灵活性 。有效的解决了数据有效性 , 重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题 。
Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE 。
它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符 。
特殊字符:
'^' 匹配输入字符串的开始位置 , 在方括号表达式中使用 , 此时它表示不接受该字符集合 。
'$' 匹配输入字符串的结尾位置 。如果设置了 RegExp 对象的 Multiline 属性 , 则 $ 也匹配 '\n' 或'\r' 。
'.' 匹配除换行符 \n之外的任何单字符 。
'?' 匹配前面的子表达式零次或一次 。
'*' 匹配前面的子表达式零次或多次 。
' ' 匹配前面的子表达式一次或多次 。
'( )' 标记一个子表达式的开始和结束位置 。
'[]' 标记一个中括号表达式 。
'{m,n}' 一个精确地出现次数范围 , m=出现次数=n,'{m}'表示出现m次,'{m,}'表示至少出现m次 。
'|' 指明两项之间的一个选择 。例子'^([a-z] |[0-9] )$'表示所有小写字母或数字组合成的字符串 。
\num 匹配 num , 其中 num 是一个正整数 。对所获取的匹配的引用 。
正则表达式的一个很有用的特点是可以保存子表达式以后使用 , 被称为Backreferencing. 允许复杂的替换能力
如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区
中,缓冲区从左到右编号, 通过\数字符号访问 。下面的例子列出了把名字 aa bb cc 变成cc, bb, aa.
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;
REGEXP_REPLACE('ELLENHILDISMIT
cc, bb, aa
'\' 转义符 。
字符簇:
[[:alpha:]] 任何字母 。
[[:digit:]] 任何数字 。
[[:alnum:]] 任何字母和数字 。
[[:space:]] 任何白字符 。
[[:upper:]] 任何大写字母 。
[[:lower:]] 任何小写字母 。
[[unct:]] 任何标点符号 。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F] 。
各种操作符的运算优先级
\ 转义符
(), (?, (?=), [] 圆括号和方括号
*,, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序
| “或”操作
--测试数据
create table test(mc varchar2(60));
insert into test values('112233445566778899');
insert into test values('22113344 5566778899');
insert into test values('33112244 5566778899');
insert into test values('44112233 5566 778899');
insert into test values('5511 2233 4466778899');
insert into test values('661122334455778899');
insert into test values('771122334455668899');
insert into test values('881122334455667799');
insert into test values('991122334455667788');
insert into test values('aabbccddee');
insert into test values('bbaaaccddee');
insert into test values('ccabbddee');
insert into test values('ddaabbccee');
insert into test values('eeaabbccdd');
insert into test values('ab123');
insert into test values('123xy');
insert into test values('007ab');
insert into test values('abcxy');
insert into test values('The final test is is is how to find duplicate words.');
commit;
一、REGEXP_LIKE
select * from test where regexp_like(mc,'^a{1,3}');
select * from test where regexp_like(mc,'a{1,3}');
select * from test where regexp_like(mc,'^a.*e$');
select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
select * from test where regexp_like(mc,'^[[:lower:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');
二、REGEXP_INSTR
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;
Select REGEXP_INSTR(mc,'[[:digit:]] $') from test;
Select REGEXP_INSTR('The price is $400.','\$[[:digit:]] ') FROM DUAL;
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;
三、REGEXP_SUBSTR
SELECT REGEXP_SUBSTR(mc,'[a-z] ') FROM test;
SELECT REGEXP_SUBSTR(mc,'[0-9] ') FROM test;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;
四、REGEXP_REPLACE
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;
oracle正则表达式,如何表达出一个号码全部由相同的数字组成,号码的位数不确定用 regexp_like这个函数来解决 , 正则表达式为:[[:punct:]] 这个正则可以找出任何标点符号 。
查询value中包含任何标点符号的记录如下:
select * from xxx where regexp_like(value,'[[:punct:]] ');
POSIX 正则表达式由标准的元字符(metacharacters)所构成: '$' 匹配输入字符串的结尾位置 。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r' 。'?' 匹配前面的子表达式零次或一次 。'*' 匹配前面的子表达式零次或多次 。
'|' 指明两项之间的一个选择 。例子'^([a-z] |[0-9] )$'表示所有小写字母或数字组合成的 '( )' 标记一个子表达式的开始和结束位置 。'{m,n}' 一个精确地出现次数范围,m=出现次数=n,'{m}'表示出现m次,'{m,}'表示至少出现m次 。
\num 匹配 num,其中 num 是一个正整数 。对所获取的匹配的引用 。[[:alpha:]] 任何字母 。
[[:digit:]] 任何数字 。
[[:alnum:]] 任何字母和数字 。
[[:space:]] 任何白字符 。
[[:upper:]] 任何大写字母 。
[[:lower:]] 任何小写字母 。
[[:punct:]] 任何标点符号 。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F] 。\转义符 *,, ?, {n}, {n,}, {n,m} 限定符^, $, anymetacharacter 位置和顺序 。
oracle 正则表达式selectregexp_replace('If IsValid("date", to_date(Trim(LK_01.TX_DATE) Then"19111111"then ','if\s isvalid.*\((.*?)\).*?then','\1 ',1,0,'i')from dual;
这样oracle正则怎么写的话就是得出LK_01.TX_DATE这个结果啦
嘻嘻
oracle正则怎么写的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle正则表达式用法、oracle正则怎么写的信息别忘了在本站进行查找喔 。
推荐阅读
- redis源不够,redis can not get resource
- 苹果xr系统ios15,苹果xr系统122建议更新么
- 用vr玩恋爱养成游戏,vr 恋爱游戏
- linux常用命令描述 linux常用命令语句
- chatGPT什么语言,ch是什么语言
- oracle函数执行语句,oracle 执行语句
- 什么直播平台送巴掌,什么直播平台送巴掌好
- python编写函数求和 python求和函数代码
- 手机html5小游戏,手机网站h5小游戏