Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift正则表达式和(.*)_Ios_Regex_Swift - Fatal编程技术网

Ios swift正则表达式和(.*)

Ios swift正则表达式和(.*),ios,regex,swift,Ios,Regex,Swift,我想从匹配正则表达式模式的字符串中提取子字符串 问题是这段代码:(“ytplayer.config={(.*?};”).exec(responseStringC)。它必须匹配,但返回零 string.exec函数: extension String { func exec (str: String) -> Array<String> { do { let regex = try NSRegularExpression(patter

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

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

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>()
        }
    }
}
扩展字符串{
func exec(str:String)->数组{
做{
让regex=try NSRegularExpression(模式:self,选项:[.case不敏感,.IgnoreMetacharacters])
让nsstr=str作为NSString
let all=NSRange(位置:0,长度:nsstr.length)
变量匹配:Array=Array()
regex.EnumerateMatchesInstalling(str,选项:NSMatchingOptions(rawValue:0),范围:all){
(结果:NSTextCheckingResult?,u,u)在
让theResult=nsstr.substringWithRange(结果!.range)
匹配项。追加(结果)
}
复赛
}抓住{
打印(“错误”)
返回数组()
}
}
}
“responseStringC”变量为:


问题是返回零。有什么线索吗?

您的
exec
代码包含:

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

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

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

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

至于款式,我推荐

"(?s)ytplayer\\.config = \\{(.*?)\\};"
或者更快:

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

请看

我甚至想不出这里有什么问题。你有什么问题?编译或运行应用程序时是否有错误?返回nil。不匹配。我建议添加
(?s)
并转义点-
“(?s)ytplayer\\.config={(.*);”
,然后删除
。忽略元字符
是的,对不起,忘记转义了。更新。