Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么';这个正则表达式代码不适用于邮政信箱字符串吗?_Ios_Objective C_Regex - Fatal编程技术网

Ios 为什么';这个正则表达式代码不适用于邮政信箱字符串吗?

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

我试图检查字符串是否是邮政信箱。我已经用两种不同的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;
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) ";