Ios 获取介于<;BR>;和:没有<;BR>;子串内部

Ios 获取介于<;BR>;和:没有<;BR>;子串内部,ios,objective-c,regex,Ios,Objective C,Regex,我正在尝试在iOS上创建一个正则表达式,以获取和:之间的子字符串 我已经试过了,但不起作用: <BR>[A-Z](.*[^<BR>]): [A-Z](.[^]): 这是一个文本示例,其中我只想获得我想要的文本 测试我想要的文本:更多文本测试测试我想要的文本:测试 我的正则表达式似乎在我不感兴趣的第一个:之后获取文本,在第二个:之后停止 我想要我想要的文本两次出现,其他什么都不要 我如何才能做到这一点?NSArray*pieces=[inputString组件由字符串分

我正在尝试在iOS上创建一个正则表达式,以获取

之间的子字符串

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

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

[A-Z](.[^
]):
这是一个文本示例,其中我只想获得我想要的
文本

测试
我想要的文本:更多文本
测试
测试
我想要的文本:测试

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

我想要
我想要的文本
两次出现,其他什么都不要

我如何才能做到这一点?

NSArray*pieces=[inputString组件由字符串分隔:@“
”;
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
    }
}
NSInteger numberOfPieces=[件数]; 对于(NSInteger i=1;i1){ //[subpieces objectAtIndex:0]是您感兴趣的字符串 } }
我没有任何使用Objective-C的经验,因此我无法就实现提供建议。此正则表达式适用于您提供的示例文本。将其与不区分大小写选项一起使用。BR和冒号之间的文本位于捕获组1内

<BR\s*/?\s*>([\w\s]+):
<BR\s*/?\s*>(?![^:]+<BR\s*/?\s*>)([^:]+):
([\w\s]+):
它只允许在BR标记和冒号之间使用字母、数字、下划线和空白字符

当然,您可以在character类中添加其他字符,但是如果您添加了所有允许您构建标记的字符,那么它将不再正常工作

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

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

<BR\s*/?\s*>([\w\s]+):
<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.
#匹配起始BR标记。
(?![^::]+)#确保此BR标记和下一个冒号字符之间没有BR标记。
([^:]+):#第1组:将每个字符匹配到下一个冒号字符。

尽可能使用html解析器(如libxml2附带的解析器)来解析html,而不是正则表达式。在野外,HTML有太多的问题是正则表达式无法处理的,这不是很灵活。它与小写的
br
s不匹配,而且对于格式正确的HTML(例如

)也不起作用。我猜OP可能正在尝试解析HTML,但从他给出的示例字符串来看,这种天真的方法可以很好地工作。如果这实际上不是他开始使用的输入,那么另一种解决方案可能更合适。供将来参考-iOS的正则表达式库(NSRegularExpression)实际上支持负外观头。谢谢<代码>(?![^::+)([^::+):
工作得很好!:-)