我正在尝试在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
两次出现,而不是别的。
我该怎么做?
答案 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
}
}