需求要求从一段文本中提取指定的内容。
[type=value]content[\type]
分别提取内容 type 、 value 、 content。
let pattern = "\\[([a-zA-Z0-9]+)=([a-zA-Z0-9]*)\\]([\\w\\W]*?)\\[\\/\\1\\]"
let sample = "[id=123456]@张三[/id]"
let regex = try! NSRegularExpression(pattern: pattern)
let matches = regex.matches(in: sample, range: NSMakeRange(0, sample.count))
var subStr = [String]()
//解析出子串
for match in matches {
for i in 0 ..< match.numberOfRanges {
subStr.append(String(sample[Range(match.range(at: i), in: sample)!]))
}
}
print(subStr)
输出结果
["[id=123456]@张三[/id]", "id", "123456", "@张三"]
其中[\\w\\W]*?最后一个?是懒惰模式,只匹配一次。