在Swift中转义反斜杠

10

我将正则表达式作为字符串值发送到CloudKit,它似乎不喜欢它,用\替换了\\。然而,一旦我从我的应用程序中获取这个值,我想将其重新转换为原始形式,使用\\代替\

我不知道如何在Swift中处理这种转义字符,因为我甚至无法在代码中使用\设置字符串,但是我仍然能够在从CloudKit获取它们时处理它们。这是一个字符串的示例:

var onlyOneBackslash: String = valueFromCloudKit
print(onlyOneBackslash) // booking\.com

如何转义反斜杠以将booking\.com转换为booking\\.com

2个回答

13

双反斜杠只存在于您的代码中,它是编译器的约定。它从未出现在字符串本身中,只存在于 Swift 代码中。

如果要在字符串中使用双反斜杠,则需要在代码中使用四个反斜杠。或者使用 String 方法将单个反斜杠替换为双反斜杠。

代码示例:

let originalString = "1\\2"
print("originalString: \(originalString)")
let newString = originalString.stringByReplacingOccurrencesOfString("\\", withString: "\\\\", options: .LiteralSearch, range: nil)
print("newString: \(newString)")

输出:

originalString: 1\2  
newString: 1\\2  

如果您想将“1\2”值赋值给字符串变量,应该怎么做? - Shahid Aslam
如果您需要在字符串中包含“\”,请使用“\”进行转义。请参阅字符串和字符,并滚动到字符串文字中的特殊字符 - zaph
1
谢谢您的回复,Zaph。实际上问题是我想将 "/Date(1310669017000)/" 作为参数发送到某个 Web 服务,如果我用 \ 转义它,那么它将会发送 "\/Date(1310669017000)\/" 而不是 "/Date(1310669017000)/"。我认为转义只适用于 print() 函数。 - Shahid Aslam
这里有两件事情。1. 在字符串中放置“\”,在代码文字量中创建时需要转义几个字符。2. 对URL编码某些字符以用于URL。这些可能会有一些重叠。关于URL编码,请查看此[SO回答](https://dev59.com/RWAf5IYBdhLWcg3wgzHI#24552028)。 - zaph
实际上,我需要将 "/Date(1310669017000)/" 参数作为 POST 发送,而不是在 URL 中进行编码。 - Shahid Aslam
@ShahidAslam,你有没有找到解决这个问题的方法?我也在做同样的事情,但是找不到任何解决方案。 - Swapnil Dhotre

1

Swift 5版本

let originalString = "1\\2"
print("originalString: \(originalString)")
let newString = originalString.replacingOccurrences(of: "\\", with: "\\\\")
print("newString: \(newString)")
replacingOccurrences(of: "\\", with: "\\\\")

输出:

originalString: 1\2  
newString: 1\\2  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接