我看到this有关关闭img标签的问题和解答。关闭所有的HTML标签(不仅IMG)
但是,如果我想关闭其他标签,如链接怎么办?
我试着写
(<img|link[^>]+)(?<!/)>
但它不会工作
有什么不对?
例子:
<link href="myhref">
<img src="mysrc">
但不
<link href="myhref"/>
<img src="mysrc"/>
我看到this有关关闭img标签的问题和解答。关闭所有的HTML标签(不仅IMG)
但是,如果我想关闭其他标签,如链接怎么办?
我试着写
(<img|link[^>]+)(?<!/)>
但它不会工作
有什么不对?
例子:
<link href="myhref">
<img src="mysrc">
但不
<link href="myhref"/>
<img src="mysrc"/>
您需要限制交替的范围。否则<
只会匹配,如果左侧部分匹配,并且[^>]+
将只匹配,如果正确的部分。
(<(?:img|link)[^>]+)(?<!/)>
应该解决这个问题。 (?:...)
是一个非捕获组,我。即,仅用于分组,不用于捕获。替换操作(与\1/>
)保持不变。
对不起,我的无知,但我如何在C#中使用它?我试图用Regex.Replace(这样做),但我不知道如何... '文本= Regex.Replace(文字,@ “] *>”,“(<(?:IMG |友情链接)[^>] +)(?“);' – Ninita
你需要使用一个HTML解析器或基于libxml2的解析器。在objective-c中有一个libxml2包装器,名为hpple。 hpple可以解析凌乱的HTML没有任何问题。
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];
}
您使用了错误的技术[使用HTML](http://stackoverflow.com/a/1732454/1583)。 – Oded
向我们展示代码和示例输入。 – JJJ
@Oded我希望这可能是真的。我正在使用一个KissXML库来处理objective-c,它不会解析未关闭的HTML .. – Dejell