imgタグを閉じることに関するこの質問と回答を見ました。
ただし、リンクなどの他のタグも閉じたい場合はどうすればよいですか?
書いてみました
(<img|link[^>]+)(?<!/)>
しかし、それは機能しません
なにが問題ですか?
例:
<link href="myhref">
<img src="mysrc">
だがしかし
<link href="myhref"/>
<img src="mysrc"/>
imgタグを閉じることに関するこの質問と回答を見ました。
ただし、リンクなどの他のタグも閉じたい場合はどうすればよいですか?
書いてみました
(<img|link[^>]+)(?<!/)>
しかし、それは機能しません
なにが問題ですか?
例:
<link href="myhref">
<img src="mysrc">
だがしかし
<link href="myhref"/>
<img src="mysrc"/>
あなたはあなたの交代の範囲を制限する必要があります。それ以外の場合<
は、交互の左側の部分が[^>]+
一致する場合にのみ一致し、右側の部分が一致する場合にのみ一致します。
(<(?:img|link)[^>]+)(?<!/)>
この問題を修正する必要があります。(?:...)
非キャプチャグループです。つまり、キャプチャではなく、グループ化にのみ使用されます。置換操作(with \1/>
)は同じままです。
HTMLパーサーまたはlibxml2ベースのパーサーを使用する必要があります。hppleと呼ばれるobjective-cのlibxml2ラッパーがあります。hppleは、乱雑なHTMLを問題なく解析できます。
KissXMLはそれを解析できるはずです...
libxml2をxmlモードでラップしますが、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];
}