Ios 正则表达式获取两个%字符之间的字符串
我需要提取两个“%”字符之间的字符串,查询字符串中可能存在多个匹配项。 现在我正在使用下面的正则表达式,有人能帮我得到确切的Regax格式吗Ios 正则表达式获取两个%字符之间的字符串,ios,regex,swift,Ios,Regex,Swift,我需要提取两个“%”字符之间的字符串,查询字符串中可能存在多个匹配项。 现在我正在使用下面的正则表达式,有人能帮我得到确切的Regax格式吗 let query = "Hello %test% ho do you do %test1%" let regex = try! NSRegularExpression(pattern:"%(.*?)%", options: []) if let results = regex?.matchesInString(query, options: .A
let query = "Hello %test% ho do you do %test1%"
let regex = try! NSRegularExpression(pattern:"%(.*?)%", options: [])
if let results = regex?.matchesInString(query, options: .Anchored, range: NSMakeRange(0,query.characters.count)){
for match in results{
}
}
您的模式很好,但代码未编译。请尝试以下方法: 斯威夫特4
NSString
使用UTF-16编码,因此使用UTF-16编码单元的数量调用NSMakeRange
斯威夫特2
从Swift的原生
String
类型中获取子字符串有点麻烦。这就是为什么我将query
转换为NSString
我为正则表达式编写了一个方法。你的正则表达式很好。你可以测试你的正则表达式。方法是:
func regexInText(regex: String!, text: String!) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = text as NSString
let results = regex.matchesInString(text,
options: [], range: NSMakeRange(0, nsString.length))
return results.map { nsString.substringWithRange($0.range)}
} catch let error as NSError {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
您可以随时调用它。这是编译吗<代码>查询和
字符。计数
和匹配安装
都是非可选的,如果第一个可选绑定成功,正则表达式
将展开。除此之外,您不应该使用尝试在这个特定的上下文中,为什么参数字符串是隐式的展开选项?如果使用regexInText(nil,text:nil)
调用函数,代码将崩溃。。。
let query = "Hello %test% how do you do %test1%"
let regex = try! NSRegularExpression(pattern:"%(.*?)%", options: [])
let tmp = query as NSString
var results = [String]()
regex.enumerateMatchesInString(query, options: [], range: NSMakeRange(0, tmp.length)) { result, flags, stop in
if let range = result?.rangeAtIndex(1) {
results.append(tmp.substringWithRange(range))
}
}
print(results) // ["test", "test1"]
func regexInText(regex: String!, text: String!) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = text as NSString
let results = regex.matchesInString(text,
options: [], range: NSMakeRange(0, nsString.length))
return results.map { nsString.substringWithRange($0.range)}
} catch let error as NSError {
print("invalid regex: \(error.localizedDescription)")
return []
}
}