swift正则表达式和(。*?)

时间:2016-07-12 18:37:39

标签: ios regex swift

我想从匹配正则表达式模式的字符串中提取子字符串。

问题是这段代码:("ytplayer.config = {(.*?)};").exec(responseStringC)。它必须匹配但返回nil。

string.exec函数:

extension String {
    func exec (str: String) -> Array<String> {
        do {
            let regex = try NSRegularExpression(pattern: self, options: [.CaseInsensitive,.IgnoreMetacharacters])
            let nsstr = str as NSString
            let all = NSRange(location: 0, length: nsstr.length)
            var matches : Array<String> = Array<String>()
            regex.enumerateMatchesInString(str, options:  NSMatchingOptions(rawValue: 0), range: all) {
                (result : NSTextCheckingResult?, _, _) in
                let theResult = nsstr.substringWithRange(result!.range)
                matches.append(theResult)
            }
            return matches
        } catch {
            print("error")
            return Array<String>()
        }
    }
}

&#34; responseStringC&#34;变量是:

http://pastebin.com/uvvq9ULA

问题是返回零。任何线索?

1 个答案:

答案 0 :(得分:1)

您的exec代码包含.IgnoreMetacharacters flag

  

将整个模式视为文字字符串。

删除它,以便可以将模式视为正则表达式模式。

另外,一个好主意是在模式的开头使用DOTALL修饰符(?s)

另外,请记住,点匹配任何字符,将其转义为与文字点匹配。

至于模式,我建议

"(?s)ytplayer\\.config = \\{(.*?)\\};"

或者更快:

"(?s)ytplayer\\.config = \\{([^}]*(?:\\}(?!;)[^}]*)*)\\};"

请参阅regex demo