作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像“stackoverflow.html”这样的字符串,并且在正则表达式“stack(.).html”中我希望在 (.) 中包含值。
我只能找到像这样的 NSPredicate:
NSString *string = @"stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]
但是,当我使用 NSRegularExpression 时,这仅表明我获得了匹配项,并且不返回字符串:
NSRange range = [string rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location == NSNotFound) return nil;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location, range.length}]);
它将返回总字符串 stackoverflow.html,但我只对 (.*) 中的内容感兴趣。我想恢复“溢出”。在 PHP 中这很容易做到,但是如何在 iOS 的 xCode 中实现这一点呢?
从逻辑上讲,如果我这样做:
NSInteger firstPartLength = 5;
NSInteger secondPartLength = 5;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location + firstPartLength, range.length - (firstPartLength + secondPartLength)}]
它给了我属性结果“溢出”。但问题是很多时候我不知道第一部分或第二部分的长度。那么有没有办法获得 (.*) 中应有的值?
或者我必须决定通过查找 (.) 的位置来选择最丑陋的方法并从那里计算第一部分和第二部分?但在正则表达式中,您可能也有 ([a-z]) ,但是使用另一个正则表达式来获取 () 之间的值的位置,然后用它来计算左右部分的丑陋方式?如果我有更多会怎样?就像“A (.) 应该找到 (.*) 的答案。”我想要一个数组作为结果,其值为 [0] A 之后的值和 [1] to 之后的值。
我希望我的问题很清楚。
提前致谢,
最佳答案
在 iOS 4.0+ 中,您可以使用 NSRegularExpression
:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"stack(.*).html" options:0 error:NULL];
NSString *str = @"stackoverflow.html";
NSTextCheckingResult *match = [regex firstMatchInString:str options:0 range:NSMakeRange(0, [str length])];
// [match rangeAtIndex:1] gives the range of the group in parentheses
// [str substringWithRange:[match rangeAtIndex:1]] gives the first captured group in this example
关于iphone - 如何在iOS中使用正则表达式获取匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184845/
我是一名优秀的程序员,十分优秀!