gpt4 book ai didi

iOS 正则表达式匹配非空白字符,直到 @ 符号后的第一个非单词字符

转载 作者:行者123 更新时间:2023-11-29 01:17:00 25 4
gpt4 key购买 nike

我很难让我的正则表达式发挥作用。我正在编写一个在评论部分进行标记的应用程序,因此每次出现 @ 符号时,我都需要查看以下文本以从中创建链接。 IE。 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);
}

}

最佳答案

您的初始发布版本中有 [^\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+ 匹配任何字母数字字符(一次或多次出现)。

参见 IDEONE demo of your code

关于iOS 正则表达式匹配非空白字符,直到 @ 符号后的第一个非单词字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com