2013-01-01 24 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 –