我试图将所有仅包含a-z中的字符的字符串与目标C中的正则表达式匹配。我在网上找到了几个提议的解决方案,但似乎没有一个真正起作用(或者我可能遗漏了某些东西)。
我尝试过以下操作,但我无法理解为什么它不起作用:
NSError *error = NULL;
NSRegularExpression *regex =[NSRegularExpression regularExpressionWithPattern:@"[a-z]*\\b" options:NSRegularExpressionCaseInsensitive error:&error];
NSUInteger numberOfMatches = 0;
NSString* testword = @"testword";
numberOfMatches = [regex numberOfMatchesInString:testword
options:0
range:NSMakeRange(0, [testword length])];
NSLog(@"%@ %i", testword, (int)numberOfMatches);
,输出为:testword 2。
我希望了解正则表达式,并且我知道还有其他方法可以解决我的问题所以请不要使用其他方法提供解决方案。谢谢!
答案 0 :(得分:3)
问题是正则表达式中的* \\ b的组合
\ b匹配单词边界,长度为0 [a-z] *可以是0到任何长度
所以第一场比赛是“testword”+ wordboundary
第二场比赛是“”+ wordboundary
修复是通过将*更改为+
来要求至少一个字母\ b也会在标点符号之前匹配。由于您在“单词”中包含标点符号,因此不能再使用单词边界(\ b)。在这种情况下,空格或字符串结束工作。您还需要添加字符串或空格的开头才能工作。
(?:^|\\s)[a-z]+(?:\\s|$)
根据你想要小写字母的陈述,只存在第二个问题。 NSRegularExpression使用NSRegularExpressionCaseInsensitive选项构造。如果你真的关心案例,你应该使用0。