NSRegularExpression是否支持部分大小写不敏感?

4

正如标题所述,我想知道Objective-C或Swift中的NSRegularExpression是否支持部分大小写不敏感搜索?

也就是说,模式是否会识别(?ismx)?如果不行,能否简要说明原因?

非常感谢您的解释。

1个回答

7

来自NSRegularExpression类参考:

表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

这个模式是不区分大小写的,所以会匹配"foo"和"Foo",因为"f"是不区分大小写的。 它不会匹配"fOO",因为"oo"是区分大小写的。


这是否被捕获了? - zaph
@Zaph:就我所见,它似乎没有引入新的捕获组。这是你的意思吗? - Martin R
是的,那就是问题。谢谢。 - zaph
2
@Zaph:我已经测试过了:在上面的例子代码中用result.rangeAtIndex(1)替换result.range会抛出一个“越界”异常,这意味着模式中没有捕获组。 - Martin R
感谢您进行详细的测试和解释! - donkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接