如果我有一个如下字符串:
" ABC; expire = Thu,16-Oct-2014 16:46:53 GMT; path = /;",我试图在expire=
和下一个;
之间提取所有内容,这样我就可以获得时间戳,我将如何在Swift中执行此操作?我完全被字符和StringIndex的想法搞糊涂了。我觉得以下代码会给我" expire="
字符串中的位置:
var range = cookie!.rangeOfString(" expires=");
但我不明白我应该从哪里去。
在类似Java的语言中,算法类似于:
1)找到" expires =&#34 ;;
的索引2)在" expires ="之后取一切的子串。以完整字符串结尾;
3)查看子串中第一次出现&#34 ;;"
4)从索引0到索引中找到的所有内容都是过期时间戳。
你如何使用Swift字符串?
答案 0 :(得分:3)
在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")
}
正则表达式很简单:[^;]*
表示&#34;直到第一个分号的字符序列&#34 ;; (?<=expire=)
表示&#34;仅在expire=
字符串&#34;之前匹配。
答案 1 :(得分:1)
就个人而言,我会使用@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]