什么是正确的IOS正则表达式

时间:2015-02-11 19:37:16

标签: ios regex

我基本上期待一个字符串形式为\ w +:\ w +或\ w +:\ w +:\ w +。我制作了一个可以单独匹配每个案例的正则表达式...

NSRegularExpression *individualConstraintRegex = [NSRegularExpression regularExpressionWithPattern:@"^(\\w+?):(\\w+?)$" options:0 error:NULL];

NSRegularExpression *individualConstraintRegex = [NSRegularExpression regularExpressionWithPattern:@"(^\\w+?):(\\w+?):(\\w+?)$" options:0 error:NULL];

但是我尝试使用' |'实现OR效果的符号,但它不起作用。

NSRegularExpression *individualConstraintRegex = [NSRegularExpression regularExpressionWithPattern:@"^(\\w+?):(\\w+?):(\\w+?)$|^(\\w+?):(\\w+?)$" options:0 error:NULL];

我确定解决方案很简单,有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你的表达式在错误的子表达式之间放置一个OR,即$|^是" OR"在^$之间,无法进行任何匹配。

使用括号进行正确的分组:

NSRegularExpression *individualConstraintRegex = [NSRegularExpression
    regularExpressionWithPattern:@"^(?:(\\w+?):(\\w+?):(\\w+?))|(?:(\\w+?):(\\w+?))$"
                         options:0
                           error:NULL
];

(?:...)是非捕获括号。它们对表达式的各个部分进行分组,而无需创建新的捕获组。我还将公共锚^$移到括号外。

请注意,由于: 不是一个单词字符,您可以删除不情愿的限定符?,然后使用+。另一种选择是使第三个:\\w+部分可选,如下所示:

NSRegularExpression *individualConstraintRegex = [NSRegularExpression
    regularExpressionWithPattern:@"^(\\w+)[:](\\w+)(?:[:](\\w+))?$"
                         options:0
                           error:NULL
];

为了便于阅读,我在列中添加了[:]。它们不是必需的。