2017-02-11 49 views
1

我想檢查一個字符串是否是P.O.框。我用兩個不同的Web瀏覽器測試了我的正則表達式字符串,它工作得很好。當我如圖所示使用它時,我無法獲得比賽。爲什麼這個正則表達式代碼不適用於P.O.盒子串?

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

什麼手段在年底'/ igm'?不區分大小寫,全局和多行?去掉它。 – Larme

回答

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) "; 

online Objective-C demo

+0

非常感謝!太棒了! –

相關問題