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



我基本上期望一个字符串的形式为\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];

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

您的表达式在错误的子表达式之间放入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
];

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

最新更新