1

我正在尝试在 iOS 上创建一个正则表达式来获取 和 之间的子<BR>字符串:

我已经尝试过了,但它不起作用:

<BR>[A-Z](.*[^<BR>]):

这是我只想获取的文本示例THE TEXT I WANT

TEST TEST TEST TEST TEST TEST<BR>THE TEXT I WANT:more text <BR>TEST TEST TEST TESTTEST TESTTEST TEST<BR>TEST TESTTEST TESTTEST TESTTEST TEST<BR>THE TEXT I WANT:TEST TESTTEST TESTTEST TESTTEST TEST

我的正则表达式似乎在第一个之后得到文本,在我不感兴趣:的第二个之后停止。:

我想要THE TEXT I WANT它发生的两次,而不是别的。

我怎样才能做到这一点?

4

2 回答 2

2

我对 Objective-C 没有任何经验,所以我无法就实现提供建议。此正则表达式适用于您提供的示例文本。将它与不区分大小写的选项一起使用。BR 和冒号之间的文本位于捕获组 1 中。

<BR\s*/?\s*>([\w\s]+):

它只允许字母、数字、下划线和空白字符位于 BR 标签和冒号之间。

您当然可以在角色类中添加其他角色,但是如果您添加了所有允许您构建标签的角色,它将不再正常工作。

如果您的正则表达式引擎支持负前瞻,您可以改用下一个正则表达式。将它与不区分大小写的选项一起使用。

BR 和冒号之间的文本位于捕获组 1 中。

<BR\s*/?\s*>(?![^:]+<BR\s*/?\s*>)([^:]+):

这是最后一个正则表达式的粗略细分:

<BR\s*/?\s*>            #Match the starting BR tag.
(?![^:]+<BR\s*/?\s*>)   #Make sure that there are no BR tags between this BR tag and the next colon character.
([^:]+):                #GROUP 1: Match every character up to the next colon character.
于 2013-05-30T19:35:51.530 回答
0
NSArray *pieces = [inputString componentsSeparatedByString:@"<BR>"];
NSInteger numberOfPieces = [pieces count];
for (NSInteger i = 1; i < numberOfPieces; i++) {
    NSArray *subpieces = [[pieces objectAtIndex:i] componentsSeparatedByString:@":"];
    if ([subpieces count] > 1) {
        // [subpieces objectAtIndex:0] is the string you're interested in
    }
}
于 2013-05-30T18:08:47.023 回答