Oracle数据库SQL参考——REGEXP_SUBSTR正则处理
- 语法
- 目的
- 举例
语法
目的
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/