Oracle的REGEXP_REPLACE函数简单用法(2021-02-03)
使用场景:
REGEXP_REPLACE让你搜索的字符串的正则表达式模式REPLACE函数的功能。默认情况下,
该函数返回source_char与replace_string取代了正则表达式模式的每个实例。
返回的字符串是在相同的字符集source_char。
语法:
1 REGEXP_REPLACE(source_char, pattern [, replace_string [, position [, occurrence [, match_parameter ] ] ] ] )
参数:
1.source_char:搜索值的字符表达式。这通常是一个字符列,可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB。
2.pattern :正则表达式
Value | Description |
^ | 匹配字符串的开头。如果与match_parameter ' m '一起使用,它将匹配表达式中任何地方的行开头。 |
$ | 匹配字符串的结尾。如果与match_parameter ' m '一起使用,它将匹配表达式中任何地方的行尾。 |
* | 匹配零个或多个. |
+ | 匹配一个或多个出现. |
? | 匹配零次或一次出现. |
. | 匹配任何字符,除了空. |
| | 像“或”一样用于指定多个选择。 |
[ ] | 用于指定一个匹配列表,当您试图匹配列表中的任何一个字符时。 |
[^ ] | 用于指定一个非匹配列表,在该列表中,您试图匹配除列表中的字符以外的任何字符。 |
( ) | 用于将表达式分组为子表达式。 |
{m} | 匹配m乘以。 |
{m,} | 匹配至少m次。 |
{m,n} | 匹配至少m次,但不超过n次。 |
\n | n是1到9之间的一个数字。匹配在遇到\n之前在()中找到的第n个子表达式。 |
[..] | 匹配一个可以多于一个字符的排序规则元素。 |
[::] | 匹配字符类。 |
[==] | 匹配等价类。 |
\d | 匹配一个数字字符. |
\D | 匹配一个非数字字符. |
\w | 匹配包括下划线的任何单词字符. |
\W | 匹配任何非单词字符. |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等. |
\S | 匹配任何非空白字符. |
\A | 匹配字符串的开头或换行符之前的字符串结尾。 |
\Z | 匹配字符串的末尾。 |
*? | 匹配前面的模式零次或多次出现。 |
+? | 匹配前面的模式一次或多次。 |
?? | 匹配前面的模式零次或一次出现。 |
{n}? | 匹配上述模式n次。 |
{n,}? | 匹配上述模式至少n次。 |
{n,m}? | 匹配上述模式至少n次,但不超过m次。 |
replace_string
可选。匹配的模式将被替换replace_string字符串。如果省略replace_string参数,
将删除所有匹配的模式,并返回结果字符串。
position
可选。在字符串中的开始位置搜索。如果省略,则默认为1。
occurrence
可选。是一个非负整数默认为1,指示替换操作的发生:
如果指定0,那么所有出现将被替换字符串。
如果指定了正整数n,那么将替换第n次出现。
match_parameter
可选。它允许你修改REGEXP_REPLACE功能匹配的行为。它可以是以下的组合:
Value | Description |
‘c’ | 区分大小写的匹配. |
‘i’ | 不区分大小写的匹配. |
‘n’ | Allows the period character (.) to match the newline character. By default, the period is a wildcard. |
‘m’ | expression is assumed to have multiple lines, where ^ is the start of a line and $ is the end of a line, regardless of the position of those characters in expression. By default, expression is assumed to be a single line. |
‘x’ | Whitespace characters are ignored. By default, whitespace characters are matched like any other character. |
EXAMPLE - 匹配第一个字
让我们开始使用REGEXP_REPLACE函数替换字符串中的第一个字。
SELECT REGEXP_REPLACE ('itmyhome is my network id', '^(\S*)', 'luck') FROM dual;
这个例子会返回”luck is my network id”,
因为它会再字符串的开始找到第一个匹配的字符,然后替换为”luck”
EXAMPLE - 匹配数字字符
我们将使用REGEXP_REPLACE函数来匹配单个数字字符模式。
SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', '\d', '#') FROM dual;
使用案例:获取pubdatestr中的数字
SELECT TEMP.*, to_number(regexp_replace(PUBDATESTR ,'[^0-9]')) AS TIMEDATE FROM ( SELECT ID, (case when PUB_DATE_STR = '1天前' THEN '24小时前' when PUB_DATE_STR = '2天前' THEN '48小时前' else PUB_DATE_STR END ) AS PUBDATESTR , TITLE AS TITLE , SUMMARY AS SUMMARYA, INFO_SOURCE AS INFOSOURCE, SOURCE_URL AS SOURCEURL , PUB_DATED AS PUBDATED FROM IPS_NCVO_NEW ) TEMP ORDER BY TIMEDATE