我有一个正则表达式,我试图在Swift中使用&#34; rgba(255,255,255,1)和#34; <解析字符串的颜色值。 / p>
我的正则表达式字符串是这样的:
^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
答案 0 :(得分:2)
numberOfMatchesInString
返回1,因为整个模式匹配一次。
使用rangeAtIndex()
获取捕获组匹配的范围:
let 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*)?\\)$"
let regex = NSRegularExpression(pattern: pattern, options: nil, error: nil)
let rgba : NSString = "rgba(255, 234, 243, 1)"
if let match = regex!.firstMatchInString(rgba, options: nil, range: NSMakeRange(0, rgba.length)) {
println(rgba.substringWithRange(match.rangeAtIndex(1)))
println(rgba.substringWithRange(match.rangeAtIndex(2)))
println(rgba.substringWithRange(match.rangeAtIndex(3)))
println(rgba.substringWithRange(match.rangeAtIndex(4)))
}
输出:
255
234
243
1