我需要使用 replace() 函数在 XQuery 中用单个破折号替换多个空白字符。
$input: 'abc def 123'
Desired Output: 'abc-def-123'
我试过了:
replace($input, '/s*', '-')
和
replace($input, '/s.*', '-')
但这些不起作用。我知道 normalize-space() 但我想要一个更通用的功能。
谢谢!- 丹
你有斜线错误的方式:
replace($input, '\s*', '-')
此外,根据 XQuery 中的实现,这可能会在每两个非空格字符之间插入一个破折号(\s*
允许 0 个字符,因此允许任何空匹配)。
[编辑:正如 Oliver Hallam 在评论中指出的那样,XQuery 规范实际上要求如果模式可能导致零长度匹配,则会引发错误。]
因此,您可能想要/必须使用+
(这意味着 1 个或多个字符)来代替:
replace($input, '\s+', '-')
顺便说一句,您的其他尝试(使用固定斜杠)将匹配单个空格字符以及后面的任何内容。
两个额外的解决方案:
一个简单的 XPath 1.0 表达式:
translate(normalize-space($vInput), ' ', '-')
还有一个 XPath 2.0 表达式,它不仅替换了空格组,还替换了任何标点符号或分隔符组:
replace($vInput, '(\p{P}|\p{Z})+', '-')