gpt4 book ai didi

转义反斜杠时 Swift 中的正则表达式不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 22:51:42 24 4
gpt4 key购买 nike

我有一个正则表达式,我试图在 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*)?\)$

你可以看到它在这里工作:

cl.ly/XxuH

当我转义反斜杠并尝试将其与 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

最佳答案

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

关于转义反斜杠时 Swift 中的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com