无法在Swift中获取正则表达式以匹配“不包含”

问题描述 投票:0回答:1

我似乎无法使以下正则表达式起作用。当字符串不是以“ quick:”开头时,它应该匹配。此正则表达式字符串来自后端,我也许可以对其进行更改,但由于可以使用任何正则表达式,因此我无法在代码中将其更改为前缀测试。

我尝试使用.range(of):

extension String {
    func regexMatch(_ pattern: String) -> Bool {
        return self.range(of: pattern, options: .regularExpression) != nil
    }
}

XCTAssertTrue("No".regexMatch(#"/^(?!quick:)/"#) )       // Fails
XCTAssertFalse("quick:No".regexMatch(#"/^(?!quick:)/"#)) // Passes

但是第一次测试失败。所以我尝试了NSRegularExpression

extension String {    
    // https://gist.github.com/torinkwok/799784dc28fd85e4751b935696030a1d
    func match(_ pattern: String, options: NSRegularExpression.Options = []) throws -> Bool {

        let regex = try NSRegularExpression(pattern: pattern, options: options)
        return regex.numberOfMatches(in: self,
                                     options: [],
                                     range: NSRange(location: 0, length: 0.distance(to: utf16.count))) != 0
    }
}

XCTAssertTrue(try "No".match(#"/^(?!quick:)/"#) )       // Fails
XCTAssertFalse(try "quick:No".match(#"/^(?!quick:)/"#)) // Passes

而且这也失败了。我将正则表达式插入在线正则表达式检查器中,以确保它可以正常工作。任何人都可以阐明为什么这在Swift中不起作用吗?

我似乎无法使以下正则表达式起作用。当字符串不是以“ quick:”开头时,它应该匹配。这个正则表达式字符串来自后端,我也许可以得到...

swift regex swift5 nsregularexpression
1个回答
0
投票

我不确定字符串中的#和\“是什么目的,但是在我制作的这个操场上,简化正则表达式的工作就很好了:

© www.soinside.com 2019 - 2024. All rights reserved.