Ios 为什么';这个正则表达式代码不适用于邮政信箱字符串吗?
我试图检查字符串是否是邮政信箱。我已经用两种不同的web浏览器测试了我的正则表达式字符串,它运行得很好。当我如图所示使用它时,我无法找到匹配项Ios 为什么';这个正则表达式代码不适用于邮政信箱字符串吗?,ios,objective-c,regex,Ios,Objective C,Regex,我试图检查字符串是否是邮政信箱。我已经用两种不同的web浏览器测试了我的正则表达式字符串,它运行得很好。当我如图所示使用它时,我无法找到匹配项 NSString *string = @"P.O. Box 123"; NSString *regexString = @"/\\b[P]\\W*?\\s*?\\.*?\\s*?[o]\\W?\\s*?\\.*?\\s*?(st|stal)?\\W*?\\s*?(box|office) /igm"; NSError *error = nil; NSReg
NSString *string = @"P.O. Box 123";
NSString *regexString = @"/\\b[P]\\W*?\\s*?\\.*?\\s*?[o]\\W?\\s*?\\.*?\\s*?(st|stal)?\\W*?\\s*?(box|office) /igm";
NSError *error = nil;
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:regexString options:NSRegularExpressionCaseInsensitive error:&error];
NSRange range = NSMakeRange(0, string.length);
if ([expression numberOfMatchesInString:string options:0 range:range] > 0) {
NSLog(@"Matches");
}
您应该从字符串模式中删除regex分隔符和选项
m
修饰符是不必要的,因为您没有^
和$
内锚,并且g
修饰符在与numberOfMatchesInString
一起使用时默认表示
使用
还要注意,在这里的大多数情况下,您可以用贪婪的量词替换懒惰的量词<代码>\W*?\s*?可以成功合并到\W*
中,因为\W
也匹配空格。例如,这也会起作用:
NSString *regexString = @"\\bP\\W*o\\W?\\s*\\.*\\s*(st|stal)?\\W*(box|office) ";
参见结尾处的“/igm”是什么意思?不区分大小写、全局和多行?移除它。非常感谢!这太完美了!
NSString *regexString = @"\\bP\\W*o\\W?\\s*\\.*\\s*(st|stal)?\\W*(box|office) ";