正则表达式在iOS源代码中查找字符串

时间:2014-04-11 08:27:17

标签: ios objective-c regex string

我需要一个正则表达式来在iOS源代码中查找字符串文字。 我想收集它们然后在其他地方使用。

我需要正则表达式才能解析下一个案例。评论将被事先删除:

char c = '"'; /* Not a string*/ NSString * *str1 = @"string"; // Here's a string
NSString *str2 = @"\"A\" class";
NSString *str3 = @"Long long"
                 @"long long string";
NSString *str4 = @"Another Long long"
                  "long long string";
NSString *str5 = @"Long untrimmed \
                   string";

我对正则表达式不太满意。我试过这个:

@"(?<!')\"((\\\\\")*[^\"\\r\\n]*(\\\\\")*)*\"'{0}"

不幸的是它挂在这样的字符串上。

3 个答案:

答案 0 :(得分:0)

你好这里是你的解决方案"(\\.|[^"])*\"使用这个正则表达式解析任何文本中的字符串文字。您可以在http://regexpal.com/上的示例文本上查看此正则表达式 希望是有帮助的!

答案 1 :(得分:0)

@(\".*\";|\".*\n.*\";|\".*\")

检查http://rubular.com/r/6dxtBzTE7P。我不能完全正确地做第三个。

答案 2 :(得分:0)

我最终使用了正则表达式(^|[^'])(@?\"([^\"\\\\]|(\\\\.)|(\\\\\n)|(\"\\s*@?\"))*\"),例如:

NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"(^|[^'])(@?\"([^\"\\\\]|(\\\\.)|(\\\\\n)|(\"\\s*@?\"))*\")" options:NSRegularExpressionAnchorsMatchLines error:&error];

[regex enumerateMatchesInString:source options:0 range:NSMakeRange(0, [source length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    NSLog(@"%@\n\n", [source substringWithRange:[result rangeAtIndex:2]]);
}];

它适用于我脑海中的任何情况,而且适用于c-string

工作原理:

  • (^|[^'])'以外的任何字符(因为'"')或行首
  • @?\"([^\"\\\\]|(\\\\.)|(\\\\\n)|(\"(\\s*\\n*\\s*)*@?\"))*\"@""开头,以"结尾。
    • 两者之间可以是除"\[^\"\\\\]
    • 之外的任何字符序列
    • 它可以是\字符,然后跳过下一个元素,它无论如何都会逃脱(\\\\.)
    • 可以转义下一行符号(\\\\\n
    • 它可以是多行字符串,因此我们跳过所有空格和新行符号。字符串中的下一行可以来自"@"@?\"\\s*@?\"

检查在线编辑器:http://regex101.com/r/gG0sF2