正则函数

本文介绍AnalyticDB MySQL版集群支持的正则函数。

前提条件

AnalyticDB MySQL版集群的内核版本需为3.1.5.10及以上版本。

说明

如何查看集群的内核版本,请参见如何查看实例版本信息

REGEXP_INSTR

regexp_instr(source, pattern[, position[, occurrence[, option]]] )
  • 命令说明:字符串source中搜索匹配正则表达式的子字符串,并返回该子字符串在字符串source中的位置。如果指定position,则从第position个字符开始匹配,默认为1;如果指定occurrence,则返回第occurrence个匹配的位置,默认为1。option可以是0或1,默认为0,option为0时返回匹配子字符串的起始位置;option为1时返回匹配子字符串结束位置的下一个字符位置。

  • 输入值说明:

    • source:待搜索的字符串,取值类型为VARCHAR。

    • pattern:正则表达式。

    • position:表示从source的第一个字符开始匹配,position默认为1。取值类型为BIGINT。

    • occurrence:表示返回第一次匹配的子字符串,occurrence默认为1。取值类型为BIGINT。

    • option:表示指定返回的位置,option可以是0或1,默认为0。取值类型为BIGINT。

  • 返回值说明:返回BIGINT类型。没有匹配到字符串时,返回0。

  • 示例:

    • 示例1

      SELECT REGEXP_INSTR('dog cat dog', 'dog') as res;

      返回结果如下。

      +-----+
      | res |
      +-----+
      |   1 |
      +-----+
    • 示例2

      SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 2) as res;

      返回结果如下。

      +-----+
      | res |
      +-----+
      |   9 |
      +-----+
    • 示例3

      SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 1, 1) as res;

      返回结果如下。

      +-----+
      | res |
      +-----+
      |   4 |
      +-----+

REGEXP_MATCHES

regexp_matches(source, pattern[, flag])
  • 命令说明:返回字符串source中匹配正则表达式的子字符串构成的数组。如果包含flag 'g',则返回所有匹配的子字符串结果,数组中可有多个元素;否则只返回匹配的第一个结果,数组中只有一个结果。如果pattern中包含带括号的子正则表达式,那么结果数组中的元素为各个子正则表达式对应的子字符串,否则为单个匹配pattern的子字符串。

  • 输入值说明:

    • source:待搜索的字符串,取值类型为VARCHAR。

    • pattern:正则表达式。

    • flag:标志一个或多个控制函数的字符,取值类型为VARCHAR。

  • 返回值说明:返回array(array(VARCHAR))类型。没有匹配到字符串时,返回空数组。

  • 示例:

    • 示例1

      SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');

      返回结果如下。

      +---------------------+
      | regexp_matches      |
      +---------------------+
      | [["bar","beque"]]   |
    • 示例2

       SELECT regexp_matches('foobarbequebaz', 'barbeque');

      返回结果如下。

      +---------------------+
      | regexp_matches      |
      +---------------------+
      | [["barbeque"]]      |        
    • 示例3

      SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');

      返回结果如下。

      +------------------------------------------+
      | regexp_matches                           |
      +------------------------------------------+
      | [["bar","beque"], ["bazil","barf"]]      |

REGEXP_REPLACE

regexp_replace(source, pattern, replacement[, position[, occurrence]])
  • 命令说明:将字符串source中匹配pattern的子字符串替换为replacement。如果指定position,则从第position个字符开始匹配和替换,默认为1;如果指定occurrence,则替换第occurrence个匹配的子字符串,默认为0,表示替换全部。

  • 输入值说明:

    • source:待搜索的字符串,取值类型为VARCHAR。

    • pattern:正则表达式。

    • replacement:将匹配pattern的字符串替换后的字符串。取值类型为VARCHAR。

    • position:表示从source的第一个字符开始匹配和替换,position默认为1。取值类型为BIGINT。

    • occurrence:表示第occurrence次匹配的字符串替换为replacement,occurrence默认为0。取值类型为BIGINT。

  • 返回值说明:返回VARCHAR类型。没有匹配到字符串时,返回原字符串。

  • 示例:

    • 示例1

      SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X') as res;

      返回结果如下。

      +-------+
      | res   |
      +-------+
      | X X X |
      +-------+
    • 示例2

      SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) as res;

      返回结果如下。

      +-----------+
      | res       |
      +-----------+
      | abc def X |
      +-----------+

REGEXP_SUBSTR

regexp_substr(source, pattern[, position[, occurrence]])
  • 命令说明:返回字符串source中匹配正则表达式的子字符串。如果指定position,则从第个字符开始匹配,position默认为1;如果指定occurrence,则返回第occurrence个匹配的子字符串,occurrence默认为1。

  • 输入值说明:

    • source:待搜索的字符串,取值类型为VARCHAR。

    • pattern:正则表达式。

    • position:表示从source的第一个字符开始匹配,position默认为1。取值类型为BIGINT。

    • occurrence:表示返回第一次匹配的子字符串,occurrence默认为1。取值类型为BIGINT。

  • 返回值说明:返回VARCHAR类型。没有匹配到字符串时,返回NULL。

  • 示例:

    • 示例1

      SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) as res;

      返回结果如下。

      +------+
      | res  |
      +------+
      | ghi  |
      +------+
    • 示例2

      SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+') as res;

      返回结果如下。

      +------+
      | res  |
      +------+
      | abc  |
      +------+