Objective-C stringByReplacingOccurrencesOfString with regex expression

时间:2012-01-09 21:44:56

标签: html objective-c regex nsstring

我正在尝试使用正则表达式分割包含html代码的字符串:

NSString* regex = @"<.*?>";
NSString* html = @"<span class="test">Test1</span><span class="test">Test2</span><span class="test">Test3</span><span class="test">Test4</span>";

html = [html stringByReplacingOccurrencesOfString:regex withString:@""];

我想删除span-tags。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

您可以使用this method执行此类操作:

NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:@"<.*?>"
                                                                    options:0
                                                                      error:NULL];

NSString *result = [re stringByReplacingMatchesInString:html
                                                options:0
                                                  range:NSMakeRange(0, [html length])
                                           withTemplate:@""];

在上面的链接中查看文档中可能需要的选项。

答案 1 :(得分:1)

如果您的输入是HTML,则使用 HTML PARSER

使用正则表达式“解析”HTML是徒劳的。请注意,有很多关于在iO / OSX上描述HTML解析的问题。

答案 2 :(得分:1)

这只是删除&lt;和&gt;字符和它们之间的所有内容,我想这就足够了:

 (NSString *) stripTags:(NSString *)str
{
    NSMutableString *ms = [NSMutableString stringWithCapacity:[str length]];

    NSScanner *scanner = [NSScanner scannerWithString:str];
    [scanner setCharactersToBeSkipped:nil];
    NSString *s = nil;
    while (![scanner isAtEnd])
    {
        [scanner scanUpToString:@"<" intoString:&s];
        if (s != nil)
            [ms appendString:s];
        [scanner scanUpToString:@">" intoString:NULL];
        if (![scanner isAtEnd])
            [scanner setScanLocation:[scanner scanLocation]+1];
        s = nil;
    }

    return ms;
}