我正在尝试检查字符串是否是P.O.框。我用2种不同的Web浏览器测试了我的Regex字符串,它运行得很好。当我按照所示使用它时,我无法得到匹配。
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");
}
答案 0 :(得分:1)
您应该从字符串模式中删除正则表达式分隔符和选项。因为您没有m
和^
锚点,所以不需要$
修饰符,默认情况下g
修饰符与numberOfMatchesInString
一起使用时。
使用
NSString *regexString = @"\\b[P]\\W*?\\s*?\\.*?\\s*?[o]\\W?\\s*?\\.*?\\s*?(st|stal)?\\W*?\\s*?(box|office) ";
另请注意,在大多数情况下,您可以使用贪婪的量词替换延迟量词。 \W*?\s*?
可以成功合并到\W*
,因为\W
也匹配空格。例如。这也会奏效:
NSString *regexString = @"\\bP\\W*o\\W?\\s*\\.*\\s*(st|stal)?\\W*(box|office) ";