Objective-C和Swift跨多行匹配的正则表达式

2024-10-03 15:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个正则表达式,最初在python中用来从一个被刮伤的HTML页面中提取2个字符串:var\s+kaynaklar.*?url\s*:\s*\"([^\"]+)\"\s*,\s*data\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的示例,如下所示:

^{pr2}$

Tags: texturldatavarhtmlasrangeresults
1条回答
网友
1楼 · 发布于 2024-10-03 15:32:40

从您的反馈中,我看到您只需要告诉regex引擎将换行符与句点匹配。在

使用^{}选项:

Allow . to match any character, including line separators.


Available in OS X v10.7 and later.

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

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

参见regex demo。在

相关问题 更多 >