我需要一个正则表达式来在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}"
不幸的是它挂在这样的字符串上。
答案 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