首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >YashanDB REGEXP_INSTR函数

YashanDB REGEXP_INSTR函数

原创
作者头像
用户10349277
发布2025-07-09 16:31:53
发布2025-07-09 16:31:53
2090
举报
文章被收录于专栏:YashanDB知识库YashanDB知识库
代码语言:javascript
复制
regexp_instr::= REGEXP_INSTR "(" expr "," regexp ["," position["," occurrence["," return_opt["," match_para["," subexpr]]]]] ")"

Copied!

REGEXP_INSTR为正则表达式函数,其功能与INSTR函数相似,但REGEXP_INSTR函数的regexp参数可使用正则表达式,对expr表示的字符串进行正则匹配,返回匹配到的子字符串的开始或结束位置(取决于return_opt参数),其结果为一个BIGINT类型的数值。如果没有找到匹配项,则函数返回0。

expr的值须为字符型,或可转换为字符型的其他类型,不能为转义字符。当expr的值为NULL时,函数返回NULL。

expr不支持32000字节以上的XMLTYPE、LOB类型数据。

函数使用输入字符集定义的字符计算字符串(仅支持UTF-8)。

regexp

RegExp,长度不超过512字节,支持转义字符,可为NULL,此时函数返回NULL。

position

指定开始进行匹配的偏移量,须为数值型数据,或可转换为NUMBER类型的其他类型数据。内部处理时统一转换为BIGINT类型。

position为与expr相同的通用表达式,其值存在如下规则:

  • 应该为一个正整数。
  • 为NULL时,函数返回NULL。
  • 为0或负数时,函数返回Out of range错误。
  • 为小数时,截断保留整数作为position值。
  • 超出expr值的长度时,不执行匹配,函数返回0值。

指定此值时,系统从expr的第position个字符开始匹配,在找到第一个正则匹配项后,继续从匹配项之后的第一个字符开始,查找第二个匹配项,直到expr的最后一个字符。

未指定此值时,默认从第一个字符开始匹配。

occurrence

指定返回regexp在expr中第occurrence次匹配到的位置,须为数值型数据,或可转换为NUMBER类型的其他类型数据。内部处理时统一转换为BIGINT类型。

occurrence为与expr相同的通用表达式,其值存在如下规则:

  • 应该为一个正整数。
  • 为NULL时,函数返回NULL。
  • 为0或负数时,函数返回Out of range错误。
  • 为小数时,截断保留整数作为occurrence值。
  • 当occurrence超出匹配次数时,不执行匹配,函数返回expr值。

未指定此值时,默认为第1次匹配。

return_opt

指定返回的匹配位置选项,其值只能为0或1,可省略,默认为0。

  • 如果指定为0,将返回匹配项的第一个字符的位置。
  • 如果指定为1,将返回匹配项的最后一个字符的位置。

match_para

正则匹配参数,与REGEXP_LIKE中的含义相同。

subexpr

subexpr参数用于当regexp中含有子表达式时,指定函数返回某一个子表达式所匹配到的位置,subexpr的值只能为0到9之间的某个整数(对于小数将截断为整数)。

子表达式是使用'()'括起来的表达式片段,其中'()'可以嵌套。所有子表达式按其左括号在表达式中出现的顺序编号。例如,考虑下面的表达式:

代码语言:javascript
复制
0123(((abc)(de)f)ghi)45(678)

Copied!

该表达式有五个子表达式,按顺序分别为:“abcdefghi”、“abcdef”、“abc”、“de”和“678”。

指定subexpr值时的匹配规则如下:

  • 当subexpr等于0时,函数按regexp表达式在expr中查找,返回匹配到的整个子字符串在expr中的位置。
  • 当subexpr大于0时:
    • 当regexp中不含子表达式时,函数返回0。
    • 否则,当函数按regexp在expr中未找到匹配项时,函数返回0。
    • 否则,函数返回按正则匹配到的整个子字符串中第subexpr个子表达式在expr中的位置。

示例

代码语言:javascript
复制
SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 2) "REGEXP_INSTR" FROM DUAL;
         REGEXP_INSTR
---------------------
                    4

SELECT REGEXP_INSTR('1234567890', '[0-9]', 1, 5) "REGEXP_INSTR" FROM DUAL;
         REGEXP_INSTR
---------------------
                    5      

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档