首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSRegularExpression模式

NSRegularExpression模式
EN

Stack Overflow用户
提问于 2013-12-27 03:06:20
回答 1查看 236关注 0票数 0

我坚持定义这种模式,它将产生我所寻找的结果。任何帮助都将不胜感激。

代码语言:javascript
复制
NSError *regexError = nil;
NSRegularExpression *parsingRegex = [NSRegularExpression regularExpressionWithPattern:@"(vector)\\((.*?)(?:,\\s*(.*?))*\\)"
                                            options:0
                                            error:&regexError];

NSString *mystring = @"vector(0.1, 0.0, 0.0, 1.0)";

NSTextCheckingResult *parse = [parsingRegex firstMatchInString:mystring
                                        options:0
                                        range:NSMakeRange(0, [string length])];


NSLog(@"string0 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:0]]);
NSLog(@"string1 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:1]]);
NSLog(@"string2 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:2]]);
NSLog(@"string3 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:3]]);
NSLog(@"string4 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:4]]);
NSLog(@"string4 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:5]]);

我希望得到以下输出:

代码语言:javascript
复制
string0 = vector(0.1, 0.0, 0.0, 1.0)
string1 = vector
string2 = 0.1
string3 = 0.0
string4 = 0.0
string5 = 1.0

我得到以下输出:

代码语言:javascript
复制
string0 = vector(0.1, 0.0, 0.0, 1.0)
string1 = vector
string2 = 0.1
string3 = 1.0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSExtendedRegularExpressionCheckingResult rangeAtIndex:]: index 4 out of range'

谢谢

所以这是可行的:

模式是:

代码语言:javascript
复制
NSRegularExpression *parsingRegex = [NSRegularExpression 
                regularExpressionWithPattern:@"(vector)\\((.*?)(?:,\\s*(.*?))(?:,\\s*(.*?))(?:,\\s*(.*?))*\\)"
                options:0
                error:&regexError];

但仅当字符串为

代码语言:javascript
复制
NSString *mystring = @"vector(0.1, 0.0, 0.0, 1.0)";

如果字符串为:

代码语言:javascript
复制
NSString *mystring = @"value(0.1)";

我预料到了:

代码语言:javascript
复制
NSRegularExpression *parsingRegex = [NSRegularExpression 
                regularExpressionWithPattern:@"(vector|value)\\((.*?)(?:,\\s*(.*?))(?:,\\s*(.*?))(?:,\\s*(.*?))*\\)"
                options:0
                error:&regexError];


NSLog(@"string0 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:0]]);
NSLog(@"string1 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:1]]);
NSLog(@"string2 =%@\n"[mystring substringWithRange:[parse rangeAtIndex:2]]);

将会工作并返回

代码语言:javascript
复制
string0 = value(0.1)
string1 = value
string2 = 0.1

但事实并非如此。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-27 03:17:45

(vector)\((.*?)(?:,\s*(.*?))*\)有3个捕获组。它永远不会有更多。

(vector)\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^)\s]+)\s*\)更接近你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20789867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档