DB2 V9.7 for Linux, UNIX, and Windows

replace 函数

fn:replace 函数将字符串中的每组字符与特定模式进行比较,然后将与模式匹配的字符替换为另一组字符。

语法

阅读语法图跳过直观语法图
>>-fn:replace(source-string,pattern,replacement-string-+--------+-)-><
                                                       '-,flags-'     

source-string
包含要替换的字符的字符串。

source-string 是 xs:string 值或空序列。

pattern
要与 source-string 进行比较的正则表达式。正则表达式是用于在搜索模式中定义一个或一组字符串的字符、通配符和运算符集合。

pattern 是 xs:string 值。

replacement-string
一个字符串,包含用于替换与 source-string 中的 pattern 相匹配的字符。

replacement-string 是 xs:string 值。

replacement-string 可包含变量 $0 到 $9。$0 表示 pattern 中的整个字符串。变量 $1 到 $9 表示 pattern 中 9 个可能带括号子表达式中的一个。($1 表示第一个子表达式,$2 表示第二个子表达式,以此类推。)

要在 replacement-string 中使用文字美元符号“$”,请使用字符串“\$”。要在 replacement-string 中使用文字反斜杠(\),请使用字符串“\\”。

flags
一个 xs:string 值,可包含下列用于控制 pattern 与 source-string 的匹配情况的任何值:
s
表示点(.)可替换任何字符。

如果未指定标志,那么点(.)替换换行符(X'0A')以外的任意字符。

m
表示插入标记(^)将替换行的开头(换行符之后的位置),而美元符号($)替换行的结尾(换行符之前的位置)。

如果未指定 m 标志,那么插入标记(^)将替换字符串的开头,并且美元符号($)会替换字符串的结尾。

i
标识匹配是不区分大小写的。

如果未指定 i 标志,那么会执行区分大小写匹配。

x
指示 pattern 中的空格字符会被忽略。

如果未指定 x 标志,那么空格字符会用于匹配。

对于长度的限制

source-string、pattern 和 replacement-string 的长度不能超过 32000 个字节。

返回的值

如果 source-string 并非空序列,那么返回的值是对 source-string 执行下列操作时生成的字符串:
  • 将搜索 source-string 以查找与 pattern 相匹配的字符。如果 pattern 包含两组或更多备用字符集,那么与 source-string 中字符相匹配的 pattern 中的第一组字符被视为匹配模式。
  • 与 pattern 匹配的 source-string 中的每组字符将替换为 replacement-string。如果 replacement-string 包含变量 $0 到 $9 中的任何一个,那么与对应该变量的 pattern 中子表达式相匹配的 source-string 子串将在 replacement-string 中替换该变量。然后经过修改的 replacement-string 将插入到 source-string 中。如果因为变量数超过子表达式数或者子表达式在 source-string 中没有匹配而导致变量在 pattern 中没有对应子表达式,那么零长度字符串会在 replacement-string 中替换该变量。

如果在 source-string 中找不到 pattern,那么会返回错误。

如果 source-string 是空序列,那么会返回零长度字符串。

示例

将一个子串替换为另一子串的示例:以下函数会将字符串“abbcacadbdcd”中的所有“a”的实例替换为“ba”。
fn:replace("abbcacadbdcd","a","ba")

返回的值为“babbcbacbadbdcd”。

将使用替换字符串的子串替换为变量的示例:以下函数在“abbcacadbdcd”中将“a”和跟在其后的字符替换为“a”之后的字符的两个实例。
fn:replace("abbcacadbdcd","a(.)","$1$1")

返回的值为“bbbcccddbdcd”。

相关参考:
translate 函数
相关信息:
正则表达式