Oracle开发中的正则表达式

今天在一个技术讨论群里有人问了一个问题,@我了一下,我就看了一眼。问题给了一个字符串,字符串里有数字有字母有特殊符号,需求是取该字符串中连续的数字。要求用正则表达式。我对正则表达式也不是精通,一知半解。就帮他看了一下,想了一个思路:

1、先找到第一个数字出现的位置;

2、从第一个数字的位置开始,找到第一个非数字出现的位置;

3、然后从第一个出现数字的位置开始截取字符,截取到第一个非字符的位置

根据以上思路写了一个函数如下:

 create or replace  function fc_get_number_lx(i_str in varchar2) return varchar2 is
  
    v_num1 number;
    v_num2 number;
    v_str  varchar2(1000);
  begin
  
    select regexp_instr(i_str, '\d', 1, 1) into v_num1 from dual;
    select regexp_instr(i_str, '\D', v_num1, 1) into v_num2 from dual;
  
    select substr(i_str, v_num1, v_num2 - v_num1) into v_str from dual;

    return v_str;
  end;

end pkg_qcf_tool;

当然,也可以直接取值,不写成函数,把上面的函数内容直接写一条语句即可:

select substr(i_str, regexp_instr(i_str, '\d', 1, 1), regexp_instr(i_str, '\D', regexp_instr(i_str, '\d', 1, 1), 1) - regexp_instr(i_str, '\d', 1, 1)) into v_str from dual;select substr(i_str, v_num1, v_num2 - v_num1) from dual;

不知道能不能直接使用正则表达式,有兴趣的可以试一下~~

时间: 2024-09-20 00:31:23

Oracle开发中的正则表达式的相关文章

asp.net 开发中常用正则表达式收藏

提供一几个开发中常用正则表达式,如有电话,手机,邮箱,url,有需要的朋友可能可以看一下. 第一个:验证输入的字符串是否为数字 view code    /// <summary>         /// 验证输入字符串为数字         /// </summary>         /// <param name="p_str_num">输入字符</param>         /// <returns>返回一个bool

开发中js正则表达式使用总结

开发中js正则表达式使用总结 和正则表达式相关的方法和属性: RegExp对象的方法: test,返回一个bool值,它指出在被查找的字符串中是否存在模式.如果存在返回true,否则返回false. exec, 用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组. compile, 把正则表达式编译为内部格式,从而执行更快. RegExp对象的属性: source, 返回正则表达式模式的文本的复本,只读. lastIndex, 返回字符位置,它是被查找字符串中下一次成功匹配的开始

开发中常用正则表达式收集

开发中常用正则表达式收集 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ascii字符计1) 匹配空白行的正则表达式:ns*r 评注:可以用来删除空白行 匹配html标记的正则表达式:<(s*?)[^>]*>.*?</1>|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分

.net开发中常用正则表达式

最简单的正则表达式大家都已熟悉,即文字字符串.特定的字符串可通过文字本身加以描述:像 foo 这样的正则表达式模式可精确匹配输入的字符串 foo.在本例中,也将匹配如下输入:the foo d was quite tasty,如果希望精确匹配,这可能不是预期结果. 当然,使用正则表达式匹配等于它自身的精确字符串是没有价值的实现,不能体现正则表达式的真正作用.假如不查找 foo,而是查找以字母 f 开头的所有单词,或所有 3 个字母的单词,那该怎么办?目前,这超出了文字字符串的合理范围.我们需要更

ORACLE数据库中怎么求除数字、字母之外的非中文字符的正则表达式_正则表达式

最近做项目,有这样一需求:ORACLE数据库中求除数字.字母之外的非中文字符的正则表达式 如有如下字段,需将其中除字母.数字.汉字外的其他所有字符替换为空 'asdfsad ,,:)()!@123234#$%^&*(我w 是e ? 中国人../\[]::''""一人' 最终得到值:asdfsad123234我是中国人一人 select FN_REG_REPLACEOTHER('asdfsad ,,:)()!@#$%^&*(我是?中国人../\[]::''"&q

oracle中的正则表达式函数regexp_instr

前面我们介绍了oracle中的正则表达式组常用的一个函数regexp_like,这里我们在介绍一个函数regexp_instr.这个正则表达式函数用的不如前一个多,但也会偶尔会用到.这个函数其实与我们前面曾介绍的instr函数其实相似. regexp_instr的原型如下: regexp_instr(x,pattern[,start[,occurrence[,return_option[,match_option]]]]) 这里每个参数分别含义如下: x  待匹配的字符串 pattern 待匹配

oracle中的正则表达式(regular expression)

正则表达式是很多编程语言中都有的.可惜oracle8i.oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能.你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了. 所谓正则表达式是对于字符串进行匹配的一种模式.举个例子来说字符串'^198[0-9]$'可以匹配'1980-1989',也即80后出生的年份.如果希望统计出公司那些员工是80后的,就可以使用如下的SQL语句: select * from emp where regexp

Android开发中超好用的正则表达式工具类RegexUtil完整实例

本文实例讲述了Android开发中超好用的正则表达式工具类RegexUtil.分享给大家供大家参考,具体如下: /*********************************************** * 正则表达式工具 * * @author chen.lin * @version 1.0 ************************************************/ public class RegexUtil { /** * 车牌号码Pattern */ pub

比较全面的C 、Java、JavaScript中的正则表达式详解_正则表达式

什么是正则表达式? 正则表达式(Regular Expression) 就是用某种模式去匹配一类字符串的公式.如你要在一篇文章中查找第一个字是"罗"最后一个字是"浩"的三个字的姓名,即"罗 * 浩":那么"罗 * 浩"就是公式,也称作 模式(Pattern) ,这篇文章就是 要匹配的串( 或叫文本 text) .再如,你要检查输入的一个字符串是否是 126 邮箱的格式,你得制定一个规则去查检,这种规则就是正则表达式. 从入门开