为 objective c 中的指定字符串创建正则表达式

Create Regular Expression for specified string in objective c

我的NSString如下

@"[o=uid=35=] hghk\u00c2\u00a0 [o=uid=30=] [o=uid=35=] cong."

我需要创建正则表达式来搜索方括号之间的数值(例如,在第一个方括号中有 35,在第二个方括号中有 30 个这样的值)。我怎么能完成这个任务。有没有其他方法可以在方括号之间搜索数值?请帮我解决这个问题。您的帮助将不胜感激。

您可以像这样构建一个正则表达式:

uid=([0-9]+)

这将查找字符串中 "uid=" 序列之后的任何数字。数字的值将在 "match 1" 中可用,因为它被放在括号中。您可以使用 http://rubular.com/.

交互地试用此正则表达式

如果你只是想要数值那么你可以试试这个

NSString *mainString = @"[o=uid=35=] hghk\u00c2\u00a0 [o=uid=30=] [o=uid=35=] cong.";
NSArray *arr = [mainString componentsSeparatedByString:@"="];
for(int i=0;i<arr.count;i++)
{
    NSString *newString = arr[i];
    NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    if ([newString rangeOfCharacterFromSet:notDigits].location == NSNotFound)
    {
        NSLog(@"%@",newString);
        // newString consists only of the digits 0 through 9
    }
}

http://regexpal.com/

使用上面的 link 来检查表达式

\b[0-9]+

找到所有整数值

([0-9])+

有效。

使用 NSRegularExpression,

NSString* strSource = @"[o=uid=35=] hghk\u00c2\u00a0 [o=uid=30=] [o=uid=35=] cong.";
NSError* errRegex = NULL;
NSRegularExpression* regex = [NSRegularExpression
    regularExpressionWithPattern:@"uid=([0-9]+)"
                         options:NSRegularExpressionCaseInsensitive
                           error:&errRegex];

NSUInteger countMatches = [regex numberOfMatchesInString:strSource
                                                 options:0
                                                   range:NSMakeRange(0, [strSource length])];
NSLog(@"Number of Matches: %ld", (unsigned long)countMatches);

[regex enumerateMatchesInString:strSource options:0
                          range:NSMakeRange(0, [strSource length])
                     usingBlock:^(NSTextCheckingResult* match,
                                  NSMatchingFlags flags, BOOL* stop) {

                             NSLog(@"Ranges: %ld", (unsigned long)[match numberOfRanges]);

                             NSString *matchFull = [strSource substringWithRange:[match range]];
                             NSLog(@"Match: %@", matchFull);

                             for (int i = 0; i < [match numberOfRanges]; i++) {
                                 NSLog(@"\tRange %i: %@", i, 
                                       [strSource substringWithRange:[match rangeAtIndex:i]]);
                             }
                     }];

if (errRegex) {
    NSLog(@"%@", errRegex);
}

这是我的代码,它运行良好。我们可以在不使用任何正则表达式的情况下轻松检查下面的数组是否包含对象(“[”和“]”之间的数字)。

NSString *tmpTxt = @"[o=uid=35=] hghk\u00c2\u00a0 [o=uid=30=] [o=uid=35=] cong.";
    NSString*splittxt=tmpTxt;
    NSMutableArray*array=[[NSMutableArray alloc]init];
    for (int i=0; i<i+1; i++) {
        NSRange r1 = [splittxt rangeOfString:@"["];
        NSRange r2 = [splittxt rangeOfString:@"]"];
        NSRange rsub=NSMakeRange(r1.location + r1.length-1, r2.location - r1.location - r1.length+2);
        if (rsub.length >2 ){
            NSCharacterSet *AllowedChars = [[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet];
            NSString*stringg=[splittxt substringWithRange:rsub];
            stringg = [[stringg componentsSeparatedByCharactersInSet:AllowedChars] componentsJoinedByString:@""];
            [array addObject:stringg];

            }
        else
        {
            break;
        }
        splittxt=[splittxt stringByReplacingCharactersInRange:rsub withString:@""];
    }

    NSLog(@"%@",array);
}

数组值为

(
    35,
    30,
    35
)