我有一个图片网址,我需要从中提取UUID。 URL形成如下:
"https://firebasestorage.googleapis.com/v0/b/project-6312172760840445565.appspot.com/o/images%2Fjohn%2F356BEDA3-E0B2-4659-9DE2-37FC8C13CDF7.webp?alt=media&token=f0c16de2-c1d9-4392-8f5b-9aa5c0527ea3"
此URL指向我的存储桶中的图像,其名称格式为/images/[username]/[UUID]
。我需要获取此UUID才能将其删除,以便在用户上传新图像(替换现有图像)时不占用空间。
我尝试使用以下正则表达式对此here进行测试:\%([A-Z0-9-]+)\.
基本上,我想提取%2F
和句点(.
)之间的所有文本,是UUID的地方(356BEDA3-E0B2-4659-9DE2-37FC8C13CDF7
)。它成功地匹配了我想要的模式(在“匹配信息”下)......好吧,包括实际上是转义斜杠的2F
。
但是,在Swift中使用它时,实际上匹配包括第一个%
之后的字符(输出为%2Fj
)。我试过这个:
let regex = Regex("%([A-Z0-9-]+).")
if let match = regex.match(self.existingItem.photoURL) {
print(match.matchedString)
}
旁注:我正在使用this Regex框架。
任何人都可以了解一下为什么在Swift中发生这种情况以及如何解决它?
答案 0 :(得分:2)
您需要捕获:
let reg = Regex("%2F([A-Z0-9-]+)[.]")
if let res = reg.match(self.existingItem.photoURL)?.captures[0] {
print("\(res)")
}
请注意,(...)
会创建一个捕获组,用于从匹配项中获取较小的子字符串。
根据Sharplet Regex Github page判断,捕获组索引以0
开头,因此可以通过0
索引访问第一个捕获组。
答案 1 :(得分:2)
@ rock321987是对的,你必须逃脱这个点:
%([A-Z0-9-]+)\\.
FWIW,它在不使用第三方框架的情况下工作:
if let range = text.rangeOfString("%([A-Z0-9-]+)\\.", options: .RegularExpressionSearch) {
let match = text.substringWithRange(range)
print(match)
}
打印:
%2F356BEDA3-E0B2-4659-9DE2-37FC8C13CDF7。