我很难让正则表达式起作用。我正在编写一个在评论部分进行标记的应用程序,因此每次有@符号时,我都需要查看以下文本以创建一个链接。即Instagram和Twitter的功能。
下面是我的正则表达式,我需要得到符合这些条件的正则表达式的所有出现:@后跟任何字母数字字符,当它到达空格或另一个@符号时结束。
NSString *searchedString = cellComment.commentText;
NSRange searchedRange = NSMakeRange(0, [searchedString length]);
NSString *pattern = @"@.+[^\s]";
NSError *error = nil;
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern: pattern options:0 error:&error];
NSArray* matches = [regex matchesInString:searchedString options:0 range: searchedRange];
for (NSTextCheckingResult* match in matches) {
NSString* matchText = [searchedString substringWithRange:[match range]];
for(int i = 0; i< match.numberOfRanges;i++)
{
NSRange group1 = [match rangeAtIndex:i];
NSLog(@"group1: %@%lu", [searchedString substringWithRange:group1],group1.location);
}
}
答案 0 :(得分:1)
您的初始发布版本中有[^\s]
,问题是在Objective-C正则表达式模式中反斜杠必须加倍。此外,.+
匹配除换行符之外的一个或多个字符,这不是您所需要的。
您可以使用
NSString *pattern = @"\\B@\\w\\S*\\b";
请参阅regex demo,匹配
\B
- 非单词边界(@
之前必须没有单词字符,如果您需要在此类情境中匹配,请删除)@
- 文字@
\w
- 一个字母数字字符(如果第一个应该是字母,请使用\p{L}
;如果您想在初始位置允许字母或数字,请使用[\p{L}\d]
\S*
- 零个或多个非空白字符,最多为...... \b
- 一个单词边界。请注意,Twitter用户名遵循以下模式:
NSString *pattern = @"@\\w+";
\w+
匹配任何字母数字字符(一次或多次出现)。