NSRegularExpression (.*) 任何单个字符零次或多次都不起作用

NSRegularExpression (.*) any single character zero or more times doesn't work

我将用于代码限制目的的正则表达式应该找到一个第一行为空的函数定义。

这是我的字符串:

let text = """
    override func withFirstLineEmpty(_ animated: Bool) {

        print()
    }
    
    override func withNoFirstLineEmpty(_ animated: Bool) {
        print()
    }
"""

这是我用 regex101 网站测试过的正则表达式:func.*{\n\n

这是我的代码:

let regexString = "func.*{\n\n"
let regexEscaped = NSRegularExpression.escapedPattern(for: regexString)
let regex = try! NSRegularExpression(pattern: regexEscaped, options: [.useUnixLineSeparators, .dotMatchesLineSeparators])
let matches = regex.matches(in: text, options: [], range: NSRange(text)!)

匹配结果数组为空。

这是我的正则表达式或 NSRegularExpression 配置的问题吗?

强烈建议搜索 \s,其中包括 \n\r

基本上 NSRange 是错误的。您必须使用专用的初始化程序 NSRange(_:in:)escapedPattern 行实际上是不需要的。有一个原生的 Swift 语法。另一方面,{ 必须转义。

let text = """
    override func withFirstLineEmpty(_ animated: Bool) {

        print()
    }
    
    override func withFirstLineEmpty(_ animated: Bool) {
        print()
    }
"""

let regexString = #"func.*\{\s{2}"#
let regex = try! NSRegularExpression(pattern: regexString)
let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))