Oracle 正则表达式实例详解
Oracle 正则表达式实例详解
FORM开发中的按行拆分需求:拆分后的行要有规律,并按前后层次排序
需求分析如下:
现有行: 2 , 2.1 , 2.2 , 2.3 3
2.1.1, 2.1.2 , 2.1.3 , 2.2.1 , 2.1.1.1, 2.1.1.2,
对 2 进行拆分得到的 结果应该是 2.4 (2.4 是通过 查看历史记录中以2 开头,有一位小数点,小数点后一位最大值,获得该最大值+1 ,得到既是新行的后缀,保证拆分是按照前后顺序递增的)
对 2.1 进行拆分得到的应该是 :2.1.4 首先要保证 每次拆分得到的下一行都是多一位小数点
对2.1 拆分 获取最大后缀 比较对象 时候 应该匹配前缀是2.1的 且只有两位小数点的 (排除前缀符合位数不符合的情况:2.1.1.1 ,2.1.1.2 )
对3 进行拆分 没有历史记录是以 3开头的情况 这时候 就要重新 开始拆分:得到的应该是 3.1
这里的关键就是匹配历史记录进行比较,决定拆分后的最后一位的最大值
匹配的时候不能按照 数字的位数来判断,因为数字有可能是两位数,三位数,应该根据小数点来判断
匹配要使用到 正则表达式:
与PHP、Python一样Oracle 的正则表达式函数也是 主要由四个函数实现:相似匹配,定位查找,获取匹配子字符串,替换匹配结果(最重要)
(1)相似匹配: regexp_like()
regexp(source_str,pattern,match_parameter)
第一个参数:原字符串,第二个参数匹配模式,第三个参数匹配选项
第三个参数 匹配选项在这几个函数中都要相似作用(可选)
常用: i:大小写不敏感; c:大小写敏感; n:点号 . 不匹配换行符号;
m:多行模式; x:扩展模式,忽略正则表达式中的空白字符。
匹配成功返回true 失败返回 false
我的使用:
IF REGEXP_LIKE(DEL_LINE_NUMBER, '^\d*\.\d*\.\d*$') THEN --匹配只有两个小数点的数字,字符串
模式中的符号说明:模式需要用一对双引号括起来
^ 标明字符串的开头, $ 标明字符串的结尾
\d 匹配 一个0-9 的数字 * 号 匹配前面的字符0次或更多次
\. 匹配一个点号,因为点号有其他含义,所以用\作为转义
(2)定位查找字符位置:regexp_instr( )
regexp_instr(source_string ,pattern,position,occurrence ,return_option ,match_parameter )
source_string:输入的字符串
pattern:正则表达式
position:标识从第几个字符开始正则表达式匹配。(默认为1)
occurrence:标识第几个匹配组。(默认为1)
return_option:0——返回第一个字符出现的位置。1:pattern下一个字符起始位置。
match_parameter:匹配模式
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Oracle 正则表达式实例详解
下载Word文档到电脑,方便收藏和打印~
相关文章
- 如何在 Java 中实现文件上传和下载功能?(Java怎么实现文件上传和下载功能)
- Java 如何实现发送 TCP 报文的方法?(java发送tcp报文的方法是什么)
- 如何巧妙重写 Java 类的 toString() 方法?(如何重写Java类的toString()方法)
- Ruby加密技术:如何改变数据存储方式?
- 在 Java 中,arraycopy 方法的具体用法是什么?(java中arraycopy的用法是什么)
- 如何巧妙利用 Java Map 来实现缓存功能?(如何利用Java Map实现缓存功能)
- Java 中 zlib 库的使用技巧有哪些?(Java中zlib库的使用技巧)
- 在 Java 中如何将 Object 转换为自定义类型?(java怎么将Object转换为自定义类型)
- Java多线程编程中常见错误有哪些?如何解决?(Java多线程编程常见错误及解决方法)
- 在 eclipse 中如何进行 java 代码规范设置?(eclipse下java代码规范设置)