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={(.*);”
,然后删除。忽略元字符
是的,对不起,忘记转义了。更新。