gpt4 book ai didi

javascript - Objective-C/Swift 正则表达式跨多行匹配

转载 作者:行者123 更新时间:2023-11-30 12:14:03 25 4
gpt4 key购买 nike

我有一个最初在 python 中使用的正则表达式,用于从抓取的 HTML 页面中提取 2 个字符串: var\s+kaynaklar.*?url\s*:\s*\"([^\"]+ )\"\s*,\s*数据\s*:\s*'([^']+)

这在 Python 中工作正常,但在 Objective-C/Swift 中不行。

这是我用来查找结果的 Swift 2.0 代码:

do {
let regexString = "var\\s+kaynaklar.*?url\\s*:\\s*\\\"([^\\\"]+)\\\"\\s*,\\s*data\\s*:\\s*'([^']+)"
let regex = try NSRegularExpression(pattern: regexString, 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 []
}

这是在 HTML 中检查 JS 的示例,如下所示:

var kaynaklar = [];

jQuery.ajax({
type:"POST",
url:"/service/part",
data:'id=31398',
success:function(a){
if(a=="hata")
{
jQuery("#player").html("<br><br><font style='color:white;'>Video kaynağı silinmiş lütfen sol üstten Kaynak butonuna tıklayarak farklı bir kaynak deneyin.</font>")
}
else
{
for (var i = 1; i < 6; i++) {
if(a["videolink"+i])
{
kaynaklar.push({"file":a["videolink"+i], "label":a["videokalite"+i],"type":"mp4"});
}
}
video_loader();
}
},
error:function(){
jQuery("#player").html("<br><br><font style='color:white;'>Video yüklenirken bir hata oluştu lütfen sayfayı yenileyip tekrar deneyin veya farklı bir kaynak deneyin.</font>")
}
})

最佳答案

根据您的反馈,我发现您只需要告诉正则表达式引擎将换行符与句点匹配即可。

使用NSRegularExpressionOptions.DotMatchesLineSeparators选项:

Allow . to match any character, including line separators.


Available in OS X v10.7 and later.

作为一种更快实现的替代方案,请在模式开头使用内联 (?s) 修饰符:

let regexString = "(?s)var\\s+kaynaklar.*?url\\s*:\\s*\\\"([^\\\"]+)\\\"\\s*,\\s*data\\s*:\\s*'([^']+)"

请参阅regex demo .

关于javascript - Objective-C/Swift 正则表达式跨多行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45645824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com