我正在使用Swift编写以下代码以构建适用于应用程序的适当正则表达式:
let regExp = "-(\\([0-9.a-z()+-×÷√^₁₀²³/]+\\)|[0-9.a-z()+-×÷√^₁₀²³/]+)"
let testString = "-(hsjshdf) -hsghsgsgs -(k) -(1/64) -dhsg62 -(p)"
let regularExpression = try! NSRegularExpression(pattern: regExp, options: [])
let matchesArray = regularExpression.matches(in: testString, options: [], range: NSRange(location: 0, length: testString.characters.count))
for match in matchesArray {
for i in 0..<match.numberOfRanges {
let range = match.rangeAt(i)
let r = testString.index(testString.startIndex, offsetBy: range.location) ..< testString.index(testString.startIndex, offsetBy: range.location + range.length)
print(testString.substring(with: r))
}
}
我得到的结果如下:
-(hsjshdf)
(hsjshdf)
-hsghsgsgs
hsghsgsgs
-(k)
(k)
-(1/64)
(1/64)
-dhsg62
dhsg62
-(p)
(p)
然而,我希望正则表达式匹配并分组括号内的子字符串,以便获得以下输出:
-(hsjshdf)
(hsjshdf)
hsjshdf
-hsghsgsgs
hsghsgsgs
-(k)
(k)
k
-(1/64)
(1/64)
1/64
-dhsg62
dhsg62
-(p)
(p)
p
我对原正则表达式进行了以下修改,它可以处理子字符串“-(hsjshdf)”,但在打印子字符串“-hsghsgsgs”的匹配项时会崩溃,出现执行时间错误(致命错误:无法超出 endIndex):
let regExp = "-(\\(([0-9.a-z()+-×÷√^₁₀²³/]+)\\)|[0-9.a-z()+-×÷√^₁₀²³/]+)"
我不熟悉NSRegularExpression。我是否使用了错误的正则表达式?我需要设置特定的选项吗?
感谢您的帮助。最亲切的问候。
/TB