Ios 正则表达式获取两个%字符之间的字符串

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

我需要提取两个“%”字符之间的字符串,查询字符串中可能存在多个匹配项。 现在我正在使用下面的正则表达式,有人能帮我得到确切的Regax格式吗

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 []
        }
    }