1

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

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

我试着写

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

但这行不通

怎么了?

例子:

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

但不是

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

3 回答 3

3

您需要限制交替的范围。否则,<只有在交替的左边部分匹配时[^>]+才会匹配,并且只有在右边部分匹配时才会匹配。

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

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

于 2013-01-01T14:33:09.703 回答
1

KissXML 应该能够解析它......
它以 xml 模式包装 libxml2 但回退到 html 模式!

  • 当你通过 options: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];
}
于 2013-01-01T14:35:31.250 回答
1

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

于 2013-01-01T14:14:43.360 回答