[英]String Operations (substring) in Swift
如果我有如下字符串:
“ abc; expire = Thu,16-Oct-2014 16:46:53 GMT; path = /;”,我正在尝试提取expire=
和next之间的所有内容;
所以我可以获得时间戳,我该如何在Swift中做到这一点? 我对字符和StringIndex的想法完全感到困惑。 我觉得以下代码将给我字符串" expire="
:
var range = cookie!.rangeOfString(" expires=");
但是我不知道我应该从那里去。
在类似Java的语言中,算法将类似于:
1)找到索引“ expires =“;
2)将“ expires =“之后的所有内容的子字符串作为完整字符串的结尾;
3)在子字符串中查找“;”的首次出现
4)从索引0到3中找到的所有索引都是到期时间戳。
您如何使用Swift字符串?
在Swift中,您可以使用正则表达式搜索字符串,而不必显式处理NSRegularExpression
:
let str = "abc; expire=Thu, 16-Oct-2014 16:46:53 GMT; path=/;"
let range = str.rangeOfString("(?<=expire=)[^;]*", options: .RegularExpressionSearch)
if let range = optRange? {
print(str.substringWithRange(range))
} else {
print("Not found")
}
正则表达式很简单: [^;]*
意思是“直到第一个分号的字符序列”; (?<=expire=)
意思是“仅在以expire=
字符串expire=
时匹配”。
就我个人而言,我会使用@dasblinkenlight使用正则表达式的解决方案,但是如果您想做更多类似于问题中的算法的操作,则可以:
let cookie: String = "abc; expires=Thu, 16-Oct-2014 16:46:53 GMT; path=/;"
if let range = cookie.rangeOfString(" expires=") {
let expiresAndPath = cookie[range.endIndex..<cookie.endIndex]
if let semicolonRange = expiresAndPath.rangeOfString(";") {
let expires = expiresAndPath[expiresAndPath.startIndex..<semicolonRange.startIndex]
/* do something with expires */
}
}
一步步:
let range = cookie.rangeOfString(" expires=")
let expiresAndPath = cookie[range.endIndex..<cookie.endIndex]
let semicolonRange = expiresAndPath.rangeOfString(";")
let expires = expiresAndPath[expiresAndPath.startIndex..<semicolonRange.startIndex]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.