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”。