1

NSScanner を使用して、文字列内の [角括弧] で囲まれたテキストを検出し、それを HTML ハイパーリンクに変換しています。このテキストを次の方法で変換したいと考えています。

This [is an] example of the [text] I'm using

に変換する必要があります

This <a href = "is an">is an</a> example of the <a href = "text">text</a> I'm using

NSScanner を実装しましたが、正しく動作させるには、角かっこの最初と 2 番目の両方を抽出する必要があります。

私のコードの現在の状態は次のとおりです。

NSScanner *theScanner;
NSString *text = nil;
theScanner = [NSScanner scannerWithString:stringWithBrackets];

NSString *stringWithoutBrackets;
while ([theScanner isAtEnd] == NO) {
    [theScanner scanUpToString:@"[" intoString:NULL];
    [theScanner scanUpToString:@"]" intoString:&text];

<BREAK>

このブレークポイントで、閉じ括弧を含まない文字列が返されます。したがって、上記のテキスト文字列の例では、最初のブレークポイントでの NSString *text の内容は次のようになります。

[is an

文字列を適切に操作するには、開き括弧と閉じ括弧の両方を使用する必要があります。

基本的に、私の質問は次のとおりです。NSScanner を1 つの文字で進め、その文字を変数「テキスト」に含めるにはどうすればよいですか?

4

1 に答える 1

2

]で文字をスキップできますscanString:

if ([theScanner scanString:@"]" intoString:NULL]) {
    text = [text stringByAppendingString:@"]"];
} else {
    // Next character is not ']'
}

このケースは、一致する文字elseがない場合にのみ発生します。その場合、文字列の最後までの部分が含まれます。]text[

または、正規表現に一致する文字列内のすべての範囲の配列を返すメソッドNSRegularExpressionなどを使用することもできます。matchesInString

于 2012-10-17T05:37:08.070 に答える