我看到关于关闭img标签的this问题和答案。
但是,如果我想关闭链接等其他标签怎么办?
我试着写
(<img|link[^>]+)(?<!/)>
但它不起作用
有什么问题?
示例:
<link href="myhref">
<img src="mysrc">
但不是
<link href="myhref"/>
<img src="mysrc"/>
答案 0 :(得分:3)
您需要限制更改的范围。否则,<
仅在交替的左侧部分匹配时才匹配,而[^>]+
仅在右侧部分匹配时才匹配。
(<(?:img|link)[^>]+)(?<!/)>
应该解决这个问题。 (?:...)
是非捕获组,i。例如,仅用于分组,而不是用于捕获。替换操作(\1/>
)保持不变。
答案 1 :(得分:1)
您需要使用基于HTML解析器或基于libxml2的解析器。在objective-c中有一个名为hpple 的 libxml2包装器。 hpple 可以毫无问题地解析凌乱的HTML。
答案 2 :(得分:1)
KissXML应该能够解析它...
它在xml模式下包装libxml2但是回到了html模式!
它工作正常: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];
}