在子字符串中获取和和之间的字符串

时间:2013-05-30 18:01:41

标签: ios objective-c regex

我正在尝试在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两次出现,而不是别的。

我该怎么做?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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
    }
}