3

与えられたNSString *test = @"...href="/functions?q=KEYWORD\x26amp...";

NSRegularExpression を使用して文字列から単語KEYWORDを抽出するにはどうすればよいですか?
iOS SDK 4.2 で次の NSRegularExpression を試しましたが、テキストが見つかりません。次のコードは問題ないように見えますか?

NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:@"(?<=href=\"\\/functions\\?q=).+?(?=\\x26amp])" options:0 error:nil];
NSRange result = [testRegex rangeOfFirstMatchInString:test options:0 range:NSMakeRange(0, [test length])];
4

1 に答える 1

10

正規表現の最後の直前に「]」があり、おそらく問題を引き起こしています。また、入力文字列のスラッシュと一致させるために、4 つのスラッシュを使用する必要があります。(C文字列でエスケープするには2倍にし、正規表現でエスケープするには2倍にします)。私は2つのことを提案します。まず、エラー パラメータに何かを渡し、デバッガで調べます。第二に、私は先読み/後読み式の大ファンではありません。このスタイルの方が読みやすいと思います:

NSString *regexStr = @"href=\"\\/functions\\?=(.+?)\\\\x26amp";
NSError *error;
NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:&error];
if( testRegex == nil ) NSLog( @"Error making regex: %@", error );
NSTextCheckingResult *result = [testRegex firstMatchInString:test options:0 range:NSMakeRange(0, [test length])];
NSRange range = [result rangeAtIndex:1];
于 2011-01-15T19:27:41.530 に答える