0

で始まり別の色/*で終わるテキストを作成するプログラムを作成しています(C コメントの構文強調表示)。*/これを試すと

@"/\*.*\*/";

私は得るunknown escape sequence。だから私は、文字通りのアスタリスクを取得するには、これを使用しなければならないと考えました

@"/[*].*[*]/";

エラーは発生しませんが、このコードを使用すると

commentPattern = @"/[*].*[*]/";
reg = [NSRegularExpression regularExpressionWithPattern:commentPattern options:kNilOptions error:nil];
results = [reg matchesInString:self.string options:kNilOptions range:NSMakeRange(0, [self.string length])];
for (NSTextCheckingResult *result in results)
{
    [self setTextColor:[NSColor colorWithCalibratedRed:0.0 green:0.7 blue:0.0 alpha:1.0] range:result.range];
}

コメントのテキストの色は変わりませんが、正規表現に問題はありません。なぜこれがうまくいかないのか誰か教えてもらえますか?他の正規表現でも同じ方法を使用しているため、結果の取得方法や色の変更方法に問題はないと思います。

4

2 に答える 2

1

これを使用したい: "\\*".

\**は正規表現のエスケープ シーケンスですが、C 文字列で\は、エスケープ文字トークンも開始するため、それもエスケープする必要があります

于 2013-07-10T00:21:18.810 に答える
0
@"/\*.*\*/";

不明なエスケープ シーケンスが表示されます。

文字列は、最初に文字列内のエスケープ シーケンスを変換し、次に結果を正規表現エンジンに渡します。たとえば、エスケープ シーケンスは\t、タブを\n表す、または改行を表す である可能性があります。文字列は、最初にエスケープ シーケンスを特別なコードに変換します。あなたのエラーは、それ\*が NSString の正当なエスケープ シーケンスではないことを示しています。

正規表現エンジンは、リテラルのバック スラッシュとそれに続く * を認識する必要があります。文字列にリテラルのバックスラッシュを取得するには、\\. ただし、読みやすさのために、2回目の試行で行ったように文字クラスを使用することをお勧めします.

結果配列に含まれるものを NSLog して、取得している一致を確認する必要があります。一致が期待どおりであれば、正規表現に問題はありません。

于 2013-07-10T00:21:26.467 に答える