saxon:replace-with

Uses a regular expression to perform string replacement; substrings that match the regex are converted to their replacement strings by calling a user-supplied function.

replace-with($in as xs:string?, $regex as xs:string, $replacer as function(xs:string) as xs:string) ➔ xs:string

Arguments

 

$in

xs:string?

The input string

 

$regex

xs:string

The regular expression

 

$replacer

function(xs:string) as xs:string

User-supplied function, which is called to convert the matching substrings into their replacements

Result

xs:string

replace-with($in as xs:string?, $regex as xs:string, $replacer as function(xs:string) as xs:string, $flags as xs:string) ➔ xs:string

Arguments

 

$in

xs:string?

The input string

 

$regex

xs:string

The regular expression

 

$replacer

function(xs:string) as xs:string

User-supplied function, which is called to convert the matching substrings into their replacements

 

$flags

xs:string

Regular expression flags

Result

xs:string

Namespace

http://saxon.sf.net/

Saxon availability

Requires Saxon-PE or Saxon-EE. Implemented since Saxon 10.

Notes on the Saxon implementation

Available since Saxon 10. In 12.4 the function becomes obsolescent, since the functionality has been absorbed into the standard 4.0 fn:replace() function.

Details

This function is similar to the fn:replace function, but instead of supplying a replacement string, the caller supplies a callback function which will be invoked to calculate a replacement for each matching substring in the input.

The string returned by the callback function is inserted "as is" into the result string; "$" and "\" are not recognized as special characters.

For example:

  • replace-with("Registration: abc123", "[a-z]{3}[0-9]{3}", upper-case#1) returns "Registration: ABC123".

  • replace-with("Part 2 Chapter 5", "[0-9]+", function($in){string(number($in)+1)} returns "Part 3 Chapter 6".

  • saxon:replace-with('ALPHA_x002F_OMEGA', '_x[0-9A-F]{4}_', function($s) {$s => substring(3, 4) => bin:hex() => bin:unpack-unsigned-integer(0,2) => codepoints-to-string()})

    outputs ALPHA/OMEGA (this handles a convention sometimes used to encode special characters in XML element and attribute names). This example uses functions from the EXPath Binary module.

The regular expression must not be one that matches a zero-length string.

Note: the callback function does not have access to captured groups within the matched substring, only to the matched substring as a whole. For access to captured groups, use the 4.0 version of fn:replace().