
REGEXP_INSTR 标量函数
REGEXP_INSTR 标量函数返回匹配子串的起始位置或结束位置,这取决于 return_option 参数的值。
该模式是 SYSIBM。
- source-string
- 用于指定要在其中进行搜索的字符串的表达式。 此表达式必须返回内置字符串、图形字符串、数值、布尔值或日期时间值。 在函数计算之前,数字、布尔值或日期时间值会被隐式转换为VARCHAR。 字符串不能指定 FOR BIT DATA 属性。
- 模式表达
- 用于指定作为搜索模式的正则表达式字符串的表达式。 此表达式必须返回内置字符串、图形字符串、数值、布尔值或日期时间值。 在函数计算之前,数字、布尔值或日期时间值会被隐式转换为VARCHAR。 字符串不能指定 FOR BIT DATA 属性。
- start
- 用于指定在 source-string 中开始搜索的位置的表达式。 表达式必须返回一个内置字符串、图形字符串、布尔值或数值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 整数的值必须大于或等于 1。 如果指定了 OCTETS,且源字符串是图形数据,则整数值必须是奇数。 缺省起始值为 1。 请参阅 CODEUNITS16、CODEUNITS32 或 OCTETS 的参数描述,以了解适用于起始位置的字符串单位。
- occurrence
- 用于指定要在源字符串中搜索的模式表达式实例的表达式。 表达式必须返回一个内置字符串、图形字符串、布尔值或数值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 此值必须大于或等于 1。 缺省实例值为 1,表示仅考虑第一个模式表达式实例。
- return-option
- 用于指定相对于该实例返回的内容的表达式。 表达式必须返回一个内置字符串、图形字符串、布尔值或数值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 该值必须为0或1:
- 值 0 返回该实例的第一个字符串单位的位置。
- 值 1 返回该实例后的字符串单位的位置。
- flags
- 用于指定可控制模式匹配方面的标志的表达式。 表达式必须返回一个未指定 FOR BIT DATA 属性的内置字符串。 字符串可以包含一个或多个有效的标志值,标志值的组合必须有效。 空字符串与值“c”相同。 缺省标志值为“c”。
表 1. 支持的标志值 标志值 描述 c 指定匹配区分大小写。 如果未指定“c”或“i”,那么此标志是缺省值。 此值不能与值“i”一起指定。 i 指定匹配不区分大小写。 此值不能与值“c”一起指定。 m 指定输入数据可以包含多行。 缺省情况下,模式中的“^”仅匹配输入字符串的开头;模式中的“$”仅匹配输入字符串的结尾。 如果设置了此标志,那么“^”和“$”也会匹配输入字符串中每一行的开头和结尾。 n 指定“.” 图案中的字符与输入字符串中的行结束符匹配。 默认情况下,“.” 图案中的字符与行结束符不匹配。 输入字符串中的回车和换行符组合作为单行结束符,与单个“.”匹配 有规律地 s 指定“.” 图案中的字符与输入字符串中的行结束符匹配。 此值是“n”值的同义词。 x 指定将忽略模式中的空格字符(除非已转义)。 - group
- 用于指定要使用模式表达式的哪个捕获组来确定源字符串中要返回的位置的表达式。 表达式必须返回一个内置字符串、图形字符串、布尔值或数值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 该值必须大于或等于0,且不能大于模式表达式中的捕获组数量。 缺省组值为 0,表示位置基于匹配整个模式的字符串。
- CODEUNITS16、CODEUNITS32 或 OCTETS
- 指定起始值和结果的字符串单位:
- CODEUNITS16 指定以 16 位 UTF-16 代码单元表示起始值和结果。
- CODEUNITS32 指定以 32 位 UTF-32 代码单元表示起始值和结果。 这是缺省值。
- OCTETS 指定以字节表示起始值和结果。
如果字符串单位指定为 CODEUNITS16 或OCTETS,而源字符串的字符串单位为 CODEUNITS32 ,则返回错误。
更多信息,请参阅字符串单元规格。
函数的结果是一个大整数。 如果找到了模式表达式,那么结果为 1 到 n(其中 n 是源字符串的实际长度加 1)之间的数字。 结果值表示用于处理该函数的位置(以字符串单位表示)。 如果找不到模式表达式,并且没有参数为空值,那么结果为 0。
如果 REGEXP_INSTR 函数的任何参数可以为空值,那么结果可以为空值。 如果任何参数为空值,那么结果为空值。
注意
- 将通过 Unicode 国际组件 (ICU) 正则表达式接口来完成正则表达式处理。
- 非Unicode数据库注意事项:
- 正则表达式模式仅支持半角控制字符;请使用字符串数据类型作为模式表达式参数。 即使对源字符串参数使用图形字符串数据类型,也可以对模式表达式参数使用字符串数据类型。
- 如果模式表达式参数是图形字符串数据类型,那么源字符串参数必须是图形字符串数据类型。
更多信息,请参阅正则表达式控制字符。
示例
- 示例 1:
- 查找前面有一个字符的第一个“o”实例。
结果为 4(即第二个“I”字符的位置)。SELECT REGEXP_INSTR('hello to you', '.o',1,1) FROM sysibm.sysdummy1 - 示例 2:
- 查找前面有一个字符的第二个"o"实例。
结果为 7(即字符“t”的位置)。SELECT REGEXP_INSTR('hello to you', '.o',1,2) FROM sysibm.sysdummy1 - 示例 3:
- 在正则表达式“(.o).”的第一个捕获组出现三次后找到位置 使用不区分大小写的匹配。
结果为 12(即字符串末尾的字符“u”的位置)。SELECT REGEXP_INSTR('hello TO you', '(.o).', 1,3,1,'i',1) FROM sysibm.sysdummy1

