iOS 正则表达式匹配非空白字符,直到 @ 符号后的第一个非单词字符
iOS regex matching non-whitespace characters up to first non-word character after @ symbol
我很难让我的正则表达式起作用。我正在编写一个在评论部分进行标记的应用程序,因此每次出现 @ 符号时,我都需要查看以下文本以从中生成 link。 IE。 Instagram 和 Twitter 的作用。
下面是我的正则表达式,我需要获取符合这些条件的正则表达式的所有出现:@ 后跟任何字母数字字符,并在到达 space 或另一个 @ 符号时结束。
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);
}
}
您的初始 post 版本中有 [^\s]
,问题是 Objective-C 正则表达式模式中的反斜杠必须加倍。此外,.+
匹配 一个或多个换行符以外的字符 ,这不是您需要的。
你可以使用
NSString *pattern = @"\B@\w\S*\b";
看到regex demo,它匹配
\B
- non-word 边界(在 @
之前不能有单词字符,如果需要在这样的上下文中匹配,请删除)
@
- 文字 @
\w
- 一个字母数字字符(如果第一个应该是字母,则使用 \p{L}
,如果您希望在初始位置允许一个字母或数字,则使用 [\p{L}\d]
)
\S*
- 零个或多个 non-whitespace 个字符,最多...
\b
- 单词边界。
请注意,Twitter 用户名遵循以下模式:
NSString *pattern = @"@\w+";
\w+
匹配任何字母数字字符(出现一次或多次)。
我很难让我的正则表达式起作用。我正在编写一个在评论部分进行标记的应用程序,因此每次出现 @ 符号时,我都需要查看以下文本以从中生成 link。 IE。 Instagram 和 Twitter 的作用。
下面是我的正则表达式,我需要获取符合这些条件的正则表达式的所有出现:@ 后跟任何字母数字字符,并在到达 space 或另一个 @ 符号时结束。
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);
}
}
您的初始 post 版本中有 [^\s]
,问题是 Objective-C 正则表达式模式中的反斜杠必须加倍。此外,.+
匹配 一个或多个换行符以外的字符 ,这不是您需要的。
你可以使用
NSString *pattern = @"\B@\w\S*\b";
看到regex demo,它匹配
\B
- non-word 边界(在@
之前不能有单词字符,如果需要在这样的上下文中匹配,请删除)@
- 文字@
\w
- 一个字母数字字符(如果第一个应该是字母,则使用\p{L}
,如果您希望在初始位置允许一个字母或数字,则使用[\p{L}\d]
)\S*
- 零个或多个 non-whitespace 个字符,最多...\b
- 单词边界。
请注意,Twitter 用户名遵循以下模式:
NSString *pattern = @"@\w+";
\w+
匹配任何字母数字字符(出现一次或多次)。