关闭所有HTML标记(不仅仅是IMG)

时间:2013-01-01 14:07:16

标签: html regex

我看到关于关闭img标签的this问题和答案。

但是,如果我想关闭链接等其他标签怎么办?

我试着写

(<img|link[^>]+)(?<!/)>

但它不起作用

有什么问题?

示例:

<link href="myhref">
<img src="mysrc">

但不是

<link href="myhref"/>
<img src="mysrc"/>

3 个答案:

答案 0 :(得分:3)

您需要限制更改的范围。否则,<仅在交替的左侧部分匹配时才匹配,而[^>]+仅在右侧部分匹配时才匹配。

(<(?:img|link)[^>]+)(?<!/)>

应该解决这个问题。 (?:...)是非捕获组,i。例如,仅用于分组,而不是用于捕获。替换操作(\1/>)保持不变。

答案 1 :(得分:1)

您需要使用基于HTML解析器或基于libxml2的解析器。在objective-c中有一个名为hpple libxml2包装器。 hpple 可以毫无问题地解析凌乱的HTML。

答案 2 :(得分:1)

KissXML应该能够解析它...
它在xml模式下包装libxml2但是回到了html模式!

  • 当您传递选项时:NSXMLDocumentTidyHTML它也称为CTidy

它工作正常:D真的(我一直在说;))

- (void)processNode:(DDXMLNode*)node {
if(node.kind==DDXMLElementKind) {
    NSLog(@"%@", node.name);
    for (id child in node.children) {
        [self processNode:child];
    }
}
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
id sample = @"<link href=\"myhref\"><img src=\"mysrc\">";
id data = [sample dataUsingEncoding:NSUTF8StringEncoding];
DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:data options:DDXMLDocumentTidyHTML error:nil];
[self processNode:doc.rootElement];
}