2013-01-01 22 views
1

我看到this有关关闭img标签的问题和解答。关闭所有的HTML标签(不仅IMG)

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

我试着写

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

但它不会工作

有什么不对?

例子:

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

但不

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

您使用了错误的技术[使用HTML](http://stackoverflow.com/a/1732454/1583)。 – Oded

+0

向我们展示代码和示例输入。 – JJJ

+0

@Oded我希望这可能是真的。我正在使用一个KissXML库来处理objective-c,它不会解析未关闭的HTML .. – Dejell

回答

3

您需要限制交替的范围。否则<只会匹配,如果左侧部分匹配,并且[^>]+将只匹配,如果正确的部分。

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

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

+0

对不起,我的无知,但我如何在C#中使用它?我试图用Regex.Replace(这样做),但我不知道如何... '文本= Regex.Replace(文字,@ “] *>”,“(<(?:IMG |友情链接)[^>] +)(?“);' – Ninita

1

你需要使用一个HTML解析器或基于libxml2的解析器。在objective-c中有一个libxml2包装器,名为hpplehpple可以解析凌乱的HTML没有任何问题。

+0

我知道。我的问题是我还需要阅读和写作。而hpple只提供阅读。我正在使用KissXML而不是 – Dejell

+0

KissXML应该能够......选项:NSXMLDocumentTidyHTML –

+0

我试过了。我没有帮助。我初始化文件是这样的:* DDXMLDocument theDocument = [[DDXMLDocument的alloc] initWithXMLString:内容选择:1个错误:&错误]; – Dejell

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]; 
} 
+0

这会帮助治疗实体引用像&nsbp? – Dejell

+0

我试过了,但是这个使它崩溃了。 ] initWithXMLString:content options:1 error:&error];。请注意,我开发的iphone – Dejell

+0

我知道,否则整个事情wouldnt需要...它工作正常与坏的HTML –