oracle正则表达式

Oracle正则表达式

爷,独闯天下 提交于 2020-01-01 12:47:25
Oracle正则表达式(regularexpression) 元字符 字符含义 举例说明 ^ 匹配字符串的开始位置(在[]中使用,此时它表示不接受该字符集合。 ^a:匹配以a开始的字符串 [^a]:匹配不含a的字符串 - 当使用在a-m表示范围; 当使用在第一个字符时表示 连字符串,如[-abc] $ 匹配字符结束位置 ‘a$’:匹配以a结束的字符串 . 匹配除换行符 n之外的任何单字符。 ? 匹配前面的子表达式零次或一次 tr(y(ing)?):可以表示try或者trying * 匹配前面的子表达式零次或多次 + 匹配前面的子表达式一次或多次 () 标记一个子表达式的开始和结束位置 a(b)*可以匹配 ab,abb,abbb,youabb (c|d)匹配c或d [] 标记一个中括号表达式 [cd]匹配选择c或d等同于 (c|d)。匹配的是单字符,[^cd]是匹配c,d之外的单字符。 [a-z]表示所有小写字母 {m,n} m= <出现次数 <=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。 | 表示或者的关系。指明两项之间的一个选择 字符簇 字符含义 [[:alpha:]] 任何字母。 [[:digit:]] [[:digit:]] 任何数字。 [[:alnum:]] 任何字母和数 [[:space:]] 任何白字符。 [[:upper:]] 任何大写字母。 [[

Oracle 查询不区分大小写 (正则函数)

安稳与你 提交于 2019-12-03 14:44:01
//不区分大小写查询 REGEXP_LIKE(字段名, '(" + keyword+ ")', 'i') " ); Oracle中的Like操作符使用'_'和'%'作为通配符,使用就像这样: SELECT name FROM test_like WHERE name like '_a%'; 即匹配test_like表name列中第2个字母是a的所有行。 但是注意, Oracle匹配时区分大小写的 。也就是说上面的查询时无法查询到name='SAas'这行的。 Oracle10g中提供的正则表达式功能可以很好的解决这个问题,当然这不是使用正则表达式函数的唯一优点,实际上它比Like操作符强大的多。 正则表达式的语法就不用多说了,现在大多数语言都支持正则表达式了。 下面主要介绍下Oracle中正表达式函数REGEXP_LIKE的使用: REGEXP_LIKE(x, pattern [, match_option]) 当源字符串x匹配正则表达式pattern时,返回true。可以使用match_option修改默认匹配选项,该参数可以被设置为: - 'c', 说明在进行匹配时区分大小写(默认选项) - 'i', 说明在进行匹配时不区分大小写 - 'n' 允许使用可以匹配任意字符的操作符(通常是'.') - 'm', 将x作为一个包含多行的字符串 举个例子: SELECT * FROM

ORACLE中的支持正则表达式的函数

冷暖自知 提交于 2019-12-03 14:42:38
ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR :与SUBSTR的功能相似 4,REGEXP_REPLACE :与REPLACE的功能相似 它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同, 但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。 POSIX 正则表达式由标准的元字符(metacharacters)所构成: '^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。 '$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹 配 '\n' 或 '\r'。 '.' 匹配除换行符之外的任何单字符。 '?' 匹配前面的子表达式零次或一次。 '+' 匹配前面的子表达式一次或多次。 '*' 匹配前面的子表达式零次或多次。 '|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的 字符串。 '( )' 标记一个子表达式的开始和结束位置。 '[]' 标记一个中括号表达式。 '{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}

正则表达式

笑着哭i 提交于 2019-12-02 16:23:10
. 匹配除换行符之外的任意字符 ? 匹配前面的子表达式零次或一次 匹配前面的子表达式一次或多次 匹配前面的表达式零次或多次 ^ ^abc,匹配以abc开头的字符串 $ abc$,匹配以abc结尾的字符串 [] 字符集合中任一个 [[:alpha:]] 任何字母 [[:digit:]] 任何数字 [[:space:]] 任何白字符(空格、制表符) [[:punct:]] 任何标点符号 [[:lower:]] 任何小写字母 [[:upper:]] 任何大写字母 [[:punct:]] 任何标点符号 mysql:rlike 字母不区分大小写 --查找以a开头的姓名 select * from stu where name rlike '^a'; --找到以字母开头姓名 select * from stu where name rlike '^[a-z]'; --以数字开头 select * from stu where name rlike '^[0-9]'; Oracle: where regexp_like(字段,正则表达式) 字母区分大小写 --找到以小写字母开头的 select * from stu where regexp_like(name,'^[a-z]');: --找到以大写字母开头的 select * from st where regexp_like(name,'^

oracle中通过正则表达式函数处理逗号分隔的字段

可紊 提交于 2019-12-02 07:06:18
这个题目的确不大好写,其实际含义基于一个场景: 比如在oracle的某张表中,有两个字段 A1 B1 1 A,B,C,D, 2 E,F 假如现在的需求,是要统计A1中,每条记录拥有多少个数目的B1,比如 A1=1的时候,其B1的字段中有4个以逗号分隔的,所以数目为4,A1=2的,有 E,F共2个,所有数目为2 而在ORACLE中,如果使用ORACLE本身的函数,其实也是可以做到这个 效果的,核心是把这些逗号分隔的字符,逐一拆出来,变成一行行,上面的例子来说, 就要想办法变成 A1 B1 1 A 1 B 1 C 1 D 2 E 2 F 读者可能马上想到,这个其实是一对多关联关系的数据库存储方法,也是最常用的, 但有的时候,用A,B,C,D这样的方式也是可以保存一对多关系的,两种之间可以进行转换, 在oracle中有两种方法实现。 1) oracle中的正则表达式的函数REGEXP_SUBSTR oracle中的REGEXP_SUBSTR的用法,先介绍下: 5个参数 第一个是输入的字符串 第二个是正则表达式 第三个是标识从第几个字符开始正则表达式匹配。(默认为1) 第四个是标识第几个匹配组。(默认为1) 第五个是是取值范围: i:大小写不敏感; c:大小写敏感; n:点号 . 不匹配换行符号; m:多行模式; x:扩展模式,忽略正则表达式中的空白字符。 全部测试数据 SQL>

正则表达式

帅比萌擦擦* 提交于 2019-12-01 20:35:39
正则表达式 1.正则表达式单字符 单字符种类 描述 例子 特定字符 某个具体的字符 ‘1’,a 范围内字符 单个字符[] 数字字符:[0-9],[259] 小写字符:[a-z] 反向字符: [ ^0-9 ] 任意字符 代表任何一个字符 '.' [root@localhost tmp]# grep '1' passwd.bak #查找有'1' 的行 [root@localhost tmp]# grep '[A-Z]' passwd.bak #查找所有的大写字母 [root@localhost tmp]# grep '[a-zA-Z]' passwd.bak #查找所有的字母 [root@localhost tmp]# grep '[,:_/]' passwd.bak #查找特殊字符 [root@localhost tmp]# grep '[^0-9]' passwd.bak #查找不包括数字的行 [root@localhost tmp]# grep '\.' passwd.bak #查找.这个字符,转义了 2:其它字符的表示 边界字符:头尾字符: ^ : ^root ------以root开头 $:false$ ------以false结尾 ^$: 代表空行 [root@localhost tmp]# grep '^root' passwd.bak [root@localhost