Oracle数据库SQL参考——REGEXP_SUBSTR正则处理

  • 语法
  • 目的
  • 举例


语法

regexp用法mysql_搜索

目的

REGEXP_SUBSTRSUBSTR通过让您在字符串中搜索正则表达式模式来扩展函数的功能。它也类似于REGEXP_INSTR,但不是返回子串的位置,而是返回子串本身。如果您需要匹配字符串的内容但不需要它在源字符串中的位置,则此函数很有用。该函数返回字符串as VARCHAR2或CLOB与相同字符集中的数据source_char。

此函数符合POSIX正则表达式标准和Unicode正则表达式指南。有关更多信息,请参阅“Oracle正则表达式支持”。

  • source_char是一个用作搜索值的字符表达式。它通常是一种字符列,并且可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,或NCLOB。
  • pattern是正则表达式。它通常是一个文本文字,可以是任何数据类型CHAR,VARCHAR2,NCHAR,或NVARCHAR2。它最多可包含512个字节。如果数据类型与数据类型pattern不同source_char,则Oracle数据库将转换pattern为数据类型source_char。有关您可以指定的运算符列表pattern,请参阅附录C“Oracle正则表达式支持”。
  • position是一个正整数,表示source_charOracle应该开始搜索的字符。默认值为1,表示Oracle以第一个字符开始搜索source_char。
  • occurrence是指示发生的正整数pattern中source_char的Oracle应搜索。默认值为1,表示Oracle搜索第一次出现的pattern。
  • match_parameter是一个文本文字,可让您更改函数的默认匹配行为。您可以为以下值指定以下一个或多个值match_parameter:
  • ‘i’ 指定不区分大小写的匹配。
  • ‘c’ 区分大小写的匹配。
  • 'n’允许句点(。)(匹配任意字符)匹配换行符。如果省略此参数,则句点与换行符不匹配。
  • 'm’将源字符串视为多行。甲骨文解释^和$作为源串中的任何地方的任何行的分别的开始和结束,,,而不是仅在整个源串的开始或结束。如果省略此参数,Oracle会将源字符串视为单行。
  • 'x’忽略空格字符。默认情况下,空白字符与自身匹配。
  • 如果指定多个矛盾值,Oracle将使用最后一个值。例如,如果指定’ic’,则Oracle使用区分大小写的匹配。如果指定的字符不是上面显示的字符,则Oracle会返回错误。

如果省略match_parameter,则:

  • 默认的区分大小写由NLS_SORT参数的值确定。
  • 句点(。)与换行符不匹配。
  • 源字符串被视为单行。

举例

以下示例检查字符串,查找以逗号为界的第一个子字符串。Oracle数据库搜索逗号,后跟一个或多个非逗号字符后跟逗号。Oracle返回子字符串,包括前导和尾随逗号。

SELECT
  REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
                ',[^,]+,') "REGEXPR_SUBSTR"
  FROM DUAL;

REGEXPR_SUBSTR
-----------------
, Redwood Shores,

以下示例检查字符串,查找http://后跟一个或多个字母数字字符的子字符串,以及可选的句点(.)。Oracle http://在斜杠(/)或字符串结尾之间搜索至少三次,最多四次出现此子字符串。

SELECT
  REGEXP_SUBSTR('http://www.oracle.com/products',
                'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
  FROM DUAL;

REGEXP_SUBSTR
----------------------
http://www.oracle.com/