0

リテラル " に一致する正規表現を作成するにはどうすればよいですか

NSLogに次を出力する NSMutableString str があります。String はサーバーからオンラインで受信されます。

"Hi, check out \"this book \". Its cool"

NSLog に次のように出力するように変更したいと思います。

Hi, check out "this book ". Its cool

私はもともと replaceOccurencesOfString ""\" with "" を使用していましたが、次のようになります。

Hi, check out \this book \. Its cool

したがって、上記の正規表現は「\」ではなく「」のみに一致し、それらの二重引用符のみを置き換える必要があると結論付けました。

ありがとうございます

4

4 に答える 4

1
[^\\]\"

[^m] は m に一致しないことを意味します

于 2012-11-07T01:21:39.330 に答える
0

JSON文字列のように見えますか?json_encode()サーバー上の PHP を使用して作成された可能性がありますか? iOS では適切な JSON パーサーを使用する必要があります。バグが発生するため、正規表現は使用しないでください。

// fetch the data, eg this might return "Hi, check out \"this book \". Its cool"
NSData *data = [NSData dataWithContentsOfURL:@"http://example.com/foobar/"];

// decode the JSON string
NSError *error;
NSString *responseString = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

// check if it worked or not
if (!responseString || ![responseString isKindOfClass:[NSString class]]) {
   NSLog(@"failed to decode server response. error: %@", error);
   return;
}

// print it out
NSLog(@"decoded response: %@", responseString);

出力は次のようになります。

Hi, check out "this book ". Its cool

注: JSON デコーディング API は、NSString オブジェクトではなく、NSData オブジェクトを受け入れます。データオブジェクトもあり、ある時点でそれを文字列に変換していると仮定しています...しかし、そうでない場合は、次を使用して NSString を NSData に変換できます。

NSString *responseString = [NSJSONSerialization JSONObjectWithData:[myString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error];

JSON の詳細については、次の URL を参照してください。

于 2012-11-07T00:57:28.490 に答える
0

これがiOS APIでサポートされているものにどのように変換されるかはわかりませんが、アンカリングをサポートしている場合(すべての正規表現エンジンがサポートする必要があると思います)、次のように記述しています

(^|[^\])」

つまり、次のように一致します。

  1. 文字列の先頭、または次の文字が続いて^いない任意の文字のいずれか :\
  2. "キャラクター_

何らかの置換を行いたい場合は、正規表現の最初の (そして唯一の) グループ (式の括弧でグループ化された部分) を取得し、置換で使用する必要があります。多くの場合、この値は、置換文字列で $1 または \1 などのラベルが付けられています。

正規表現エンジンがPCREベースの場合、もちろん、グループ化された式を後読みに入れることができるので、キャプチャをキャプチャして置換に保存する必要はありません。

于 2012-11-07T00:22:40.207 に答える
0

正規表現についてはわかりませんが、より簡単な解決策は、

NSString *str = @"\"Hi, check out \\\"this book \\\". Its cool\"";
NSLog(@"string before modification = %@", str);    
str = [str stringByReplacingOccurrencesOfString:@"\\\"" withString:@"#$%$#"];
str = [str stringByReplacingOccurrencesOfString:@"\"" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"#$%$#" withString:@"\\\""];//assuming that the chances of having '#$%$#' in your string is zero, or else use more complicated word
NSLog(@"string after modification = %@", str);

出力:

string before modification = "Hi, check out \"this book \". Its cool"
string after modification = Hi, check out \"this book \". Its cool

正規表現:[^\"].*[^\"].これは、Hi, check out \"this book \". Its cool

于 2012-11-06T23:48:03.413 に答える