我有一个正则表达式,我试图在Swift中使用它来解析字符串的颜色值,格式为“rgba(255,255,255,1)”
我的正则表达式字符串是这样的:^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$
您可以在这里看到它的工作原理:
当我转义反斜杠并尝试将其与NSRegularExpression
一起使用时,它不再匹配给定的字符串。^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$
我做错什么了吗?
代码示例:
import Foundation
var pattern = "^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$"
var string = "rgba(255, 234, 243, 1)"
var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(0), error: nil)
regex.numberOfMatchesInString(string, options: nil, range: NSMakeRange(0, countElements(string))) // Yields 1. Should yield 4
1条答案
按热度按时间bvhaajcl1#
numberOfMatchesInString
返回1,因为整个模式匹配一次。使用rangeAtIndex()
获取捕获组匹配的范围:输出:
**更新:**使用Swift 5.7中引入的
Regex
类型,需要macOS 13+或iOS 16+):