NSRegularExpression enumerateMatchesInString正确用法

问题描述 投票:0回答:1

我的字符串看起来像这样:

dog-3
dog-2
dog-1
dog0
aaaaaaa
dog1
dog2
dog3
dog4
bbbbbbb
dog5
dog6
dog7
dog8
ccccccc
dog9
dog10
dog11
aaaaaaa
dog12
dog13
dog14
dog15
bbbbbbb
dog16
dog17
dog18
dog19
ccccccc
dog20
dog21
dog22
dog23

我正在尝试编写正则表达式以匹配模式“ ^ aaaaaaa $。+ ^ bbbbbbb $。+ ^ ccccccc”这是我的代码,上面描述了str]

NSRegularExpression *conflictMarker = [NSRegularExpression regularExpressionWithPattern:@"^aaaaaaa$.+^bbbbbbb$.+^ccccccc"
                                                                                    options:NSRegularExpressionDotMatchesLineSeparators|NSRegularExpressionAnchorsMatchLines
                                                                                      error:&error];
[conflictMarker enumerateMatchesInString:str options:0
                                       range:NSMakeRange(0, str.length)
                                  usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

                                        NSRange matchRange = [result range];
                                        NSString *subst = [str substringWithRange:matchRange];
                                        NSInteger a = result.numberOfRanges;

                                        NSLog(@"%ld ", a);

                                        for (NSInteger a = 0; a < result.numberOfRanges; a++) {
                                            NSRange matchRange = [result rangeAtIndex:a];
                                            NSString *subst = [str substringWithRange:matchRange];
                                            NSLog(@"\n%@", subst);

                                        }
    }];

我对以上代码的期望是收到两次匹配;第一场比赛的比赛范围从“ dog1”到“ dog8”,第二场比赛的比赛范围从“ dog12”到“ dog19”,但我只获得了一场比赛,比赛范围从“ dog1”到“ dog19”。

我在这里做错什么了,我该如何纠正?

提前感谢。

objective-c nsregularexpression
1个回答
0
投票
您可以使用

^aaaaaaa(?:\R(?!(?:bbbbbbb|aaaaaaa|ccccccc)$).*)*\Rbbbbbbb(?:\R(?!(?:aaaaaaa|ccccccc)$).*)*\Rccccccc

请参阅正则表达式演示。请确保将正则表达式选项更改为options:NSRegularExpressionAnchorsMatchLines,此模式才能起作用。

详细信息

    [^-行首
  • [aaaaaaa-字符串
  • (?:\R(?!(?:bbbbbbb|aaaaaaa|ccccccc)$).*)*-0次或多次
    • [\R(?!(?:bbbbbbb|aaaaaaa|ccccccc)$)-不跟bbbbbbbaaaaaaaccccccc和行尾的换行符序列
  • [.*-尽可能多的除换行符以外的0+个字符]
  • [\R-换行符序列
  • [bbbbbbb-字符串
  • (?:\R(?!(?:aaaaaaa|ccccccc)$).*)*-0次或多次
    • [\R(?!(?:aaaaaaa|ccccccc)$)-不跟aaaaaaaccccccc和行尾的换行符序列
  • [.*-尽可能多的除换行符以外的0+个字符]
  • [\R-换行符序列
  • [ccccccc-字符串。
  • © www.soinside.com 2019 - 2024. All rights reserved.