Oracle函数详解:regexp_replace[通俗易懂]

Oracle函数详解:regexp_replace[通俗易懂]regexp_replace:官方内容:官方语法:官方说明:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htmregexp_replace函数是replace函数的扩展函数,用于通过正则表达式来进行匹配替换,默认情况下,每次匹配到的正则,都替换为replace_string,返回的字符串与…

大家好,又见面了,我是你们的朋友全栈君。

regexp_replace:

  1. 官方内容:
    官方语法:
    syntax
    官方说明:
    purpose

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm

regexp_replace函数是replace函数的扩展函数,用于通过正则表达式来进行匹配替换,默认情况下,每次匹配到的正则,都替换为replace_string,返回的字符串与source_char字符集相同。如果source_char为非LOB类型,则返回varchar2数据类型,如果为LOB类型,则返回CLOB类型,该函数符合POSIX正则和Unicode正则。

  • source_char是一个用作搜索的值,它通常是一种字符列,可以以下是任何数据类型CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOB

  • pattern是正则表达式,可以是以下任意数据类型CHAR、VARCHAR2、NCHAR、NVARCHAR2。最多可包含512个字节。如果pattern数据类型与source_char异同,则Oracle将转换pattern的数据类型与source_char的一致。

  • replace_string可以是以下任意数据类型CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOB。如果replace_string是CLOB或NCLOB,则Oracle截断replace_string为32K。replace_string可含有多达500个反向引用作为子表达式,其形式为\n,n为数字1~9。如果n在replace_string中为反斜线字符,则需使用转移字符在其前面(\)

  • position是一个正整数,表示在source_char中Oracle应该开始搜索的字符。默认值为1,表示Oracle以第一个字符开始搜索。

  • occurrence是一个非负整数,表示替换动作的发生,如果为0,则Oracle将替换所有匹配项,如果为正整数n,则Oracle将替换第n个匹配项。

  • match_parameter是一个文本文件,用于更改匹配行为,仅影响匹配过程,并不影响replace_string。可以指定以下一个或多个值:
    ‘i’指定不区分大小写的匹配
    ‘c’区分大小写的匹配
    ‘n’允许‘.’(句点,配置任意字符)匹配换行符,如果省略此此参数,则句点与换行符不匹配
    ‘m’将源字符串视为多行。Oracle将源字符串中的^或$视为行首或行尾,如果省略此参数,Oracle将源字符串视为单行
    ‘x’忽略空格字符。默认情况下,空白字符与自身匹配。
    如果指定多个矛盾值,Oracle将使用最后一个值,例如指定’ic’,则Oracle使用区分大小写匹配,如果指定的不是上述字符,则返回错误
    如果省略match_parameter,则:
    1.默认的区分大小写由NLS_SORT参数的值决定
    2.句点‘.’与换行符不匹配
    3.源字符串视为单行

以上中文内容为本人自行翻译,仅供参考

  1. 实验:
    以下开始通过实验验证各参数功能的使用
  • 简单使用:

实验 1:

SQL> select regexp_replace('0123456789','01234','0abc') from dual;

将 01234 替换为 0abc
regexp_replace-1

完全匹配替换,并非对应替换
regexp_replace-1-exp

  • 通过正则表达式匹配

实验 2:

SQL> select regexp_replace('01234abcde56789','[0-9]','*#') as new_str from dual;

将配置到的数字替换为’ *# ’
regexp_replace-2
实验 3:

SQL> select regexp_replace('01234abcde56789','[a-z]') as new_str from dual;

将字符串中的字母去掉(小写字母)
regexp_replace-3

实验 4:

SQL> select regexp_replace('+86 13811112222','(\+[0-9]{2})( )([0-9]{3})([0-9]{4})([0-9]{4})','(\1)\3-\4-\5') as new_str from dual;

格式化手机号,将+86 13811112222转换为(+86)138-1111-2222,’+’在正则里有定义,需转义
regexp_replace-4
实验 5:

SQL> select regexp_replace('01234abcde','(.)','\1 ') from dual;

将字符用空格分隔
regexp_replace-5

  • 其他参数
    实验 6:
SQL>  select regexp_replace('#0a1b2C3D4e#','[0-9a-zA-Z]','*',4) as new_str from dual;

从第4个值开始(包含第4个值),将所有数字、小写字母、大写字母替换为 ’ * ’
regexp_replace-6
实验7:

SQL> select regexp_replace('#01234abcDEFe#','[0-9a-zA-Z]','*',4,6) as new_str from dual;

从第4个值开始(包含第4个值),配置到第6个值时,将其替换为 ’ * ’
regexp_replace-7

实验 8 :

SQL> select regexp_replace('abcdefg','[A-Z]','*',1,0,'i') from dual;

通过i参数,不区分大小写进行匹配
regexp_replace-8
实验 9 :

SQL> select regexp_replace('a 2 b 3 c 4 d 5 e 6 f 7 g','([a-z])(.)','\1',1,0,'n') from dual;

通过n参数使 ’ . ’ 可以匹配换行符,实现合并
regexp_replace-9

实验 10:

SQL> select regexp_replace('aa a a bb b b','a a','0') from dual;

SQL> select regexp_replace('aa a a bb b b','a a','0',1,0,'x') from dual;

对于第一条,匹配的是 ‘a a’
regexp_replace-10-1
对于第二条,匹配的是 ‘aa’
regexp_replace-10-2

由于对于参数 m(将源字符串视为多行)不了解,无法给予合适的说明实验,还望哪位大神出手相助一下

附:正则表达式(POSIX标准扩展正则ERE)

符号 释义
\ 代表它自己、引用下一个字符、引入一个操作符、什么也不做
* 匹配零或多个
+ 匹配一个或多个
? 匹配零个或一个
| 或运算,其左右操作数均可以为一个子表达式
^ 默认情况下匹配字符串的开头。在多行模式下,它匹配源字符串中任意位置的行头
$ 默认情况下匹配字符串的结尾。在多行模式下,它匹配源字符串中任意位置的行尾
. 匹配字符集中支持的任意字符,NULL除外
[ ] 用于指定匹配列表的括号表达式
( ) 对表达式进行分组,将其视为单个子表达式
{m} 恰好匹配m次
{m,} 匹配至少m次
{m,n} 匹配至少m次,但不超过n次
\n 反向引用表达式(n为1~9)匹配在\n之前的圆括号内包含的第n个子表达式
[. .] 指定排序规则,可以是多字符元素(例如,西班牙语中的[.ch.])
[: :] 指定字符类(例如,[:alpha:]),它匹配字符类中的任何字符
[= =] 指定等价类。(例如,[=a=]匹配索引具有基本字母a的字符)

https://docs.oracle.com/cd/B19306_01/server.102/b14200/ap_posix001.htm#BABJDBHB
以上资料来源于Oracle官网,由本人自行理解翻译,如若有误请指正

[: :]字符类:

[:xxxx:] 含义 范围
[:space:] 包括换行符、空格、tab在内的空白字符 tab、空格
[:blank:] 空格和tab tab、空格
[:alpha:] 字母 a-z、A-Z
[:alnum:] 字母和数字 a-z、A-Z、0-9
[:digit:] 十进制数 0-9
[:xdigit:] 十六进制数 0-9、a-f、A-F
[:lower:] 小写字母 a-z
[:upper:] 大写字母 A-Z
[:cntrl:] 控制字符 ctrl、backspace等
[:punct:] 标点符号 ,.?’
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130990.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何搭建镜像网站_模拟网站的主页地址怎么打开

    如何搭建镜像网站_模拟网站的主页地址怎么打开TeleportUltraTeleportUltra所能做的,不仅仅是离线浏览某个网页(让你离线快速浏览某个网页的内容当然是它的一项重要功能),它可以从Internet的任何地方抓回你想要的任何文件,它可以在你指定的时间自动登录到你指定的网站下载你指定的内容,你还可以用它来创建某个网站的完整的镜象,作为创建你自己的网站的参考。我们在日常学习、工作中,需要研究和学习其它优秀网站的构建等,通过TeleportUltraTeleportUltra创建网站完整的镜象,就显得非常方便了。…

    2025年10月6日
    3
  • 正则表达式中/i,/g,/ig,/gi,/m的区别和含义

    正则表达式中/i,/g,/ig,/gi,/m的区别和含义

    2021年11月5日
    65
  • 随机效应与固定效应&面板数据回归「建议收藏」

    随机效应与固定效应&面板数据回归「建议收藏」转载自:随机效应与固定效应方差分析主要有三种模型:即固定效应模型(fixedeffectsmodel),随机效应模型(randomeffectsmodel),混合效应模型(mixedeffectsmodel)。所谓的固定、随机、混合,主要是针对分组变量而言的。固定效应模型,表示你打算比较的就是你现在选中的这几组。例如,我想比较3种药物

    2022年5月23日
    48
  • jboss安装与配置_拼多多下载安装

    jboss安装与配置_拼多多下载安装一、Jboss下载:1、点击http://jbossas.jboss.org/downloads/找到合适的版本下载;我这里是用的Jboss-as-7.1.1.Final版本,算是比较新的一个版本。二、Jboss安装:1、首先将下好的Jboss解压到自己想要存放的位置;2、配置环境变量(非必要步骤),建议还是将环境变量配好,便于…

    2022年10月4日
    5
  • flask中jsonify和json区别[通俗易懂]

    flask中jsonify和json区别[通俗易懂]JSON数据结构要把json与字典区分开来dumps(字典转换成Json)loads(Json转换成字典)参考:Python的字典是一种数据结构,JSON是一种数据格式。json就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而python的字典的字符串表现形式的规则看上去和json类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。Python的字典key可以是任意可hash对象,json只能是字符串。形式上有些相像,但JSO

    2022年5月23日
    52
  • MVC三层架构理解

    MVC三层架构理解MVC三层架构什么是MVC:ModelviewController模型、视图、控制器以前的架构用户直接访问控制层,控制层就可以直接操作数据库;servlet–CRUD–>数据库弊端:程序十分臃肿,不利于维护servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码架构:没有什么是加一层解决不了的!程序猿调用↑JDBC(实现该接口)↑MysqlOracleSqlServer….(不同厂商)MVC三层架构M

    2022年6月25日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号