0

如何构造一个与文字匹配的正则表达式“但前提是它前面没有转义斜杠,即 \

我有一个 NSMutableString str在 NSLog 上打印以下内容。字符串是从在线服务器接收的。

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

我想更改它,使其在 NSLog 上打印以下内容

Hi, check out "this book ". Its cool

我最初使用 replaceOccurencesOfString ""\" 和 ""。但随后它将执行以下操作:

Hi, check out \this book \. Its cool

所以,我得出结论,我需要上面的正则表达式只匹配“而不是 \”,然后只替换那些双引号。

谢谢mbh

4

4 回答 4

1
[^\\]\"

[^m] 表示不匹配 m

于 2012-11-07T01:21:39.330 回答
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 回答
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 接受 NSData 对象,而不是 NSString 对象。我假设您也有一个数据对象,并在某个时候将其转换为字符串......但如果您没有,您可以使用以下方法将 NSString 转换为 NSData:

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

有关 JSON 的更多详细信息,请参见:

于 2012-11-07T00:57:28.490 回答