我看到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