【发布时间】:2015-01-05 12:54:18
【问题描述】:
如标题所述,我想知道 Objective-c 或 Swift 中的 NSRegularExpression 是否支持不区分大小写的部分搜索?
也就是说,模式会识别 (?ismx) 吗?如果没有,是否有导致这种无能的简要原因?
非常感谢您的解释。
【问题讨论】:
标签: objective-c regex xcode swift nsregularexpression
如标题所述,我想知道 Objective-c 或 Swift 中的 NSRegularExpression 是否支持不区分大小写的部分搜索?
也就是说,模式会识别 (?ismx) 吗?如果没有,是否有导致这种无能的简要原因?
非常感谢您的解释。
【问题讨论】:
标签: objective-c regex xcode swift nsregularexpression
来自NSRegularExpression Class Reference:
表 2 正则表达式运算符
...
(?ismwx-ismwx:...)
标志设置。使用启用或禁用的指定标志计算括号表达式。 ...
(?ismwx-ismwx)
标志设置。更改标志设置。更改适用于设置之后的模式部分。例如, (?i) 更改为不区分大小写的匹配。 ...
例子:
let pattern = "(?i)f(?-i)oo"
//Or: let pattern = "(?i:f)oo"
let regex = NSRegularExpression(pattern: pattern, options: nil, error: nil)!
let string : NSString = "foo, Foo, fOO"
regex.enumerateMatchesInString(string, options: nil, range: NSMakeRange(0, string.length)) {
(result, flags, stop) -> Void in
println(string.substringWithRange(result.range))
}
输出:
富 富该模式匹配“foo”和“Foo”,因为“f”不区分大小写。 它不匹配“fOO”,因为“oo”是区分大小写的。
【讨论】:
result.range 替换为result.rangeAtIndex(1) 会引发“超出范围”异常,这意味着模式中没有捕获组。