2017-02-11 5 views
1

文字列がP.O.であるかどうかを確認しようとしています。ボックス。私は2つの異なるWebブラウザでRegexの文字列をテストしたところ、うまく動作します。私はそれを使用すると、私は一致を得ることはできません。この正規表現コードはなぜ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

何を参照してください?大文字と小文字を区別しない、グローバルと複数行?それを除く。 – Larme

答えて

1

あなたは文字列パターンから正規表現区切り文字やオプションを削除してください。 numberOfMatchesInStringと一緒に使用すると、デフォルトでg修飾子が使用されるため、^$のアンカーが含まれていないため、m修飾子は不要です。

使用

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

は最後に `/ igm`を意味online Objective-C demo

+0

ありがとう!これは完璧です! –

関連する問題