无法在Swift中获取与“不包含”匹配的正则表达式
我似乎无法使下面的正则表达式工作。当字符串不以quick:开头时,它应该匹配。这个正则表达式字符串来自后端,我可以更改它,但我不能在代码中将其更改为前缀测试,因为任何正则表达式都可以使用 我尝试使用。范围:无法在Swift中获取与“不包含”匹配的正则表达式,swift,regex,swift5,nsregularexpression,Swift,Regex,Swift5,Nsregularexpression,我似乎无法使下面的正则表达式工作。当字符串不以quick:开头时,它应该匹配。这个正则表达式字符串来自后端,我可以更改它,但我不能在代码中将其更改为前缀测试,因为任何正则表达式都可以使用 我尝试使用。范围: extension String { func regexMatch(_ pattern: String) -> Bool { return self.range(of: pattern, options: .regularExpression) != nil
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中不起作用吗?我不确定“和”的目的是什么,但简化正则表达式在我做的这个游戏中效果很好:
import UIKit
var str = "Hello, playground"
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
}
}
let shouldBeTrue = try "No".match("^(?!quick:)")
let shouldBeFalse = try "quick:No".match("^(?!quick:)")
谢谢你的头发。真不敢相信这么容易。我尝试了该字符串的许多组合,但肯定没有尝试仅删除“/”。是Swift 5中的一个新特性,它告诉编译器使用字符串作为文本,并且不做任何类型的插值。我很高兴我能提供帮助。谢谢你给我的提示。