如何使用 XQuery 中的 Replace() 函数替换一个或多个空白字符?

Dan*_*ary 3 regex xquery

我需要使用replace()函数在XQuery中用一个破折号替换多个空白字符。

$input: 'abc   def   123'
Desired Output: 'abc-def-123'
Run Code Online (Sandbox Code Playgroud)

我试过:

replace($input, '/s*', '-')
Run Code Online (Sandbox Code Playgroud)

replace($input, '/s.*', '-')
Run Code Online (Sandbox Code Playgroud)

但这些都不起作用。我知道 normalize-space() 但我想要一个更通用的函数。

谢谢!- 丹

Mar*_*der 5

你把斜线弄反了:

replace($input, '\s*', '-')
Run Code Online (Sandbox Code Playgroud)

另外,根据 XQuery 中的实现,这可能会在每两个非空格字符之间插入破折号(因为\s*允许 0 个字符,因此允许任何空匹配)。

[编辑:正如 Oliver Hallam 在评论中指出的那样,XQuery 规范实际上要求如果模式可能导致零长度匹配,则引发错误。]

因此,您可能想要/必须使用+(这意味着 1 个或多个字符):

replace($input, '\s+', '-')
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您的其他尝试(使用固定斜杠)将匹配单个空白字符及其后面的任何内容。