我需要使用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() 但我想要一个更通用的函数。
谢谢!- 丹
你把斜线弄反了:
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)
顺便说一句,您的其他尝试(使用固定斜杠)将匹配单个空白字符及其后面的任何内容。