2016-09-08 11 views
1

私はこの動作を得ることができません。私はリンゴの文書に従っていますRegexは文字列全体を返します。iOS NSRegularExpression

私は、このような状試料の文字列を持っている:

NSString * testString = @"Server Error -4"; 

次のように、私は正規表現を持っている:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"Server\\sError\\s(-?\\d+)" options:NSRegularExpressionCaseInsensitive error:&error]; 

私が行うとき:

[testString substringWithRange:[regex rangeOfFirstMatchInString:testString options:kNilOptions range:NSMakeRange(0, testString.length)]]; 

私は戻って文字列全体を取得。 (つまり、範囲の一致は0から文字列の最後までです)。任意のアイデアが私の正規表現で何が間違っていますか?

答えて

1

あなたの表現には何も問題はありません。最初の一致が文字列全体をカバーすることが起こります。

それはあなたが最初キャプチャグループの一致の抽出されやりたいことを自分の表現の構造からなります。

実際
NSTextCheckingResult *match = [regex firstMatchInString:testString 
       options:0 
       range:NSMakeRange(0, [testString length])]; 
NSRange range = [match rangeAtIndex:1]; 
NSString *errorCode = [testString substringWithRange:matchRange]; 
+0

[正規表現numberOfMatchesInString:たTestStringオプション:0範囲:NSMakeRange(0 、[test length])]は1だけを返します。意味は1つだけです。 – Rafthecalf

+0

@RafaelGutierrezそうです、それは全体の文字列をカバーする一致です。答えからコードを試しましたか? – dasblinkenlight

+0

はい、ありがとうAlot @ dasblinkenlight – Rafthecalf

関連する問題