【发布时间】:2011-05-20 05:22:41
【问题描述】:
如何使用正则表达式搜索/枚举NSString?
正则表达式,例如:/(NS|UI)+(\w+)/g。
【问题讨论】:
标签: objective-c cocoa nsstring
如何使用正则表达式搜索/枚举NSString?
正则表达式,例如:/(NS|UI)+(\w+)/g。
【问题讨论】:
标签: objective-c cocoa nsstring
如果你只是想匹配字符串中的某些模式,有一个简单的方法可以用NSString 测试正则表达式:
NSString *string = @"Telecommunication";
if ([string rangeOfString:@"comm" options:NSRegularExpressionSearch].location != NSNotFound)
NSLog(@"Got it");
else
NSLog(@"No luck");
注意,通常你会想要...
if ([string rangeOfString:@"cOMm"
options:NSRegularExpressionSearch|NSCaseInsensitiveSearch].location
!= NSNotFound)
NSLog(@"yes match");
在 Swift 中,你可以编写这样的代码 ...
let string = "Telecommunication"
if string.rangeOfString("cOMm", options: (NSStringCompareOptions.RegularExpressionSearch | NSStringCompareOptions.CaseInsensitiveSearch)) != nil {
print("Got it")
} else {
print("No luck")
}
let string = "Telecommunication"
if string.range(of: "cOMm", options: [.regularExpression, caseInsensitive]) != nil {
print("Got it")
} else {
print("No luck")
}
请注意,Swift 2 的 rangeOfString(_:,options:) 和 Swift 4 的 range(of:options:) 返回 Range<String.Index>?,如果搜索失败则返回 nil
【讨论】:
NSRegularExpressionSearch 不在记录的选项中,您确定可以这样做吗?
你需要使用NSRegularExpression类。
文档中启发的示例:
NSString *yourString = @"";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"(NS|UI)+(\\w+)"
options:NSRegularExpressionCaseInsensitive
error:&error];
[regex enumerateMatchesInString:yourString options:0 range:NSMakeRange(0, [yourString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
// your code to handle matches here
}];
【讨论】:
NSLog。
(NS|UI)+(\w+) 是regextester.com 上的有效正则表达式。
\w?那是一个匹配单词字符的元字符。
\w 确实是正确的元字符,但反斜杠字符在普通字符串中用作转义字符。在将\w 传递给RegEx 对象之前,编译器的字符串解析器会将其更改为简单的w。运行 NSLog 亲自查看。因此正确的符号是\\w,因为编译器会将'\\' 转换为'\'。这种约定在许多语言中都有体现。