动态截取字符串&正则表达式

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)

例子:
SELECT REGEXP_SUBSTR(‘as,ds,pk’,’[^,]+’,1,1,‘i’) AS STR FROM DUAL;
SELECT REGEXP_SUBSTR(‘as,ds,pk’,’[^,]+’,1,3,‘i’) AS STR FROM DUAL;

自定义function
/*==================================================
Procedure/Function Name :
get_dynamic_str
Description:
动态截取字符串
Argument:
p_str : 需要进行操作的字符串
p_pattern :操作需要进行匹配的正则表达式
p_position :字符串截取时同正则表达式进行匹配的起始位置
默认为1
p_occurence :字符串截取时同正则表达式进行匹配的结束位置
默认为1
p_modifier : 正则表达式匹配检索模式 默认为c
i 不区分大小写进行检索
c 区分大小写进行检索

Return:

History:
1.00 Creation
==================================================*/
FUNCTION get_dynamic_str(p_str IN VARCHAR2,
p_pattern IN VARCHAR2,
p_position IN NUMBER DEFAULT 1,
p_occurence IN NUMBER DEFAULT 1,
p_modifier IN VARCHAR2 DEFAULT ‘c’)
RETURN VARCHAR2 IS

l_dynamic_str VARCHAR2(240);
l_pattern     VARCHAR2(240); --获取正则表达式匹配规则

BEGIN
–获取正则表达式匹配规则
l_pattern := ‘[^’ || p_pattern || ‘]+’;

--获取截取后的字符串
SELECT regexp_substr(p_str,
                     l_pattern,
                     p_position,
                     p_occurence,
                     p_modifier)
  INTO l_dynamic_str
  FROM dual;
RETURN l_dynamic_str;

EXCEPTION
WHEN OTHERS THEN
l_dynamic_str := NULL;
RETURN l_dynamic_str;
END get_dynamic_str;

–正则表达式
REGEXP_LIKE :与LIKE的功能相似
REGEXP_INSTR :与INSTR的功能相似
REGEXP_SUBSTR :与SUBSTR的功能相似
REGEXP_REPLACE :与REPLACE的功能相似

结构:
‘^’ 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
‘$’ 匹配输入字符串的结尾位置。如果设置了 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]。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值