Mule 4中如何正确转义反斜杠(\)?
DataWeave反斜杠转义失效的解决办法
我写了一个用于替换特殊字符的DataWeave函数,其他特殊字符的转义都正常,但反斜杠()始终无法被正确转义。尝试在searchReplace数组中添加{ searchValue: "\", replaceValue: "\\" }完全没用,原函数代码如下:
%dw 2.0 output application/java var searchReplace = [ { searchValue: "?", replaceValue: "\?" }, { searchValue: "&", replaceValue: "\&" }, { searchValue: "|", replaceValue: "\|" }, { searchValue: "!", replaceValue: "\!" }, { searchValue: "^", replaceValue: "\^" }, { searchValue: "~", replaceValue: "\~" }, { searchValue: "*", replaceValue: "\*" }, { searchValue: ":", replaceValue: "\:" }, { searchValue: "+", replaceValue: "\+" }, { searchValue: "'", replaceValue: "\'" }, { searchValue: "-", replaceValue: "\-" }, { searchValue: "{", replaceValue: "\{" }, { searchValue: "}", replaceValue: "\}" }, { searchValue: "[", replaceValue: "\[" }, { searchValue: "]", replaceValue: "\]" }, { searchValue: "(", replaceValue: "\(" }, { searchValue: ")", replaceValue: "\)" } ] fun replaceValuesArray(n,text,values) = if (n == 0) text replace values[n].searchValue with(values[n].replaceValue) else replaceValuesArray(n - 1, text replace values[n].searchValue with(values[n].replaceValue), values) var searchTerm = replaceValuesArray(sizeOf(searchReplace) - 1,payload.search, searchReplace) --- if ((searchTerm == "") or (searchTerm == null)) "" else (searchTerm ++ "*")
问题原因
DataWeave中,单个反斜杠\是转义字符,用来表示特殊字符(比如换行、引号等)。如果要表示一个实际的反斜杠字符,必须用双反斜杠\\来转义。之前添加的条目里,searchValue: "\"会被DataWeave解析为不完整的转义序列,根本无法正确匹配输入中的反斜杠。
解决方法
在searchReplace数组中添加正确的反斜杠替换条目:
{ searchValue: "\\", replaceValue: "\\\\" }
searchValue: "\\":DataWeave会将其解析为单个反斜杠字符,用来匹配输入中的\replaceValue: "\\\\":DataWeave会将其解析为两个反斜杠字符,也就是转义后的目标结果\\
修改后的完整代码
%dw 2.0 output application/java var searchReplace = [ { searchValue: "?", replaceValue: "\?" }, { searchValue: "&", replaceValue: "\&" }, { searchValue: "|", replaceValue: "\|" }, { searchValue: "!", replaceValue: "\!" }, { searchValue: "^", replaceValue: "\^" }, { searchValue: "~", replaceValue: "\~" }, { searchValue: "*", replaceValue: "\*" }, { searchValue: ":", replaceValue: "\:" }, { searchValue: "+", replaceValue: "\+" }, { searchValue: "'", replaceValue: "\'" }, { searchValue: "-", replaceValue: "\-" }, { searchValue: "{", replaceValue: "\{" }, { searchValue: "}", replaceValue: "\}" }, { searchValue: "[", replaceValue: "\[" }, { searchValue: "]", replaceValue: "\]" }, { searchValue: "(", replaceValue: "\(" }, { searchValue: ")", replaceValue: "\)" }, // 新增的反斜杠替换条目 { searchValue: "\\", replaceValue: "\\\\" } ] fun replaceValuesArray(n,text,values) = if (n == 0) text replace values[n].searchValue with(values[n].replaceValue) else replaceValuesArray(n - 1, text replace values[n].searchValue with(values[n].replaceValue), values) var searchTerm = replaceValuesArray(sizeOf(searchReplace) - 1,payload.search, searchReplace) --- if ((searchTerm == "") or (searchTerm == null)) "" else (searchTerm ++ "*")
内容的提问来源于stack exchange,提问作者SH4444KO
相关产品推荐
相关产品推荐

