【问题标题】:Does NSRegularExpression support partial case insensitive?NSRegularExpression 是否支持部分不区分大小写?
【发布时间】:2015-01-05 12:54:18
【问题描述】:

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

也就是说,模式会识别 (?ismx) 吗?如果没有,是否有导致这种无能的简要原因?

非常感谢您的解释。

【问题讨论】:

    标签: objective-c regex xcode swift nsregularexpression


    【解决方案1】:

    来自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”是区分大小写的。

    【讨论】:

    • 那是捕捉还是不捕捉?
    • @Zaph:它没有(据我所知)引入新的捕获组。是这个意思吗?
    • 是的,这就是问题所在。谢谢。
    • @Zaph:我已经测试过了:将上面示例代码中的result.range 替换为result.rangeAtIndex(1) 会引发“超出范围”异常,这意味着模式中没有捕获组。
    • 感谢您的详细测试和解释!
    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 2012-09-23
    • 2012-03-01
    • 1970-01-01
    • 2013-03-16
    • 2011-03-27
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多